start building out views
This commit is contained in:
2
app.js
2
app.js
@ -26,6 +26,7 @@ var connectAssets = require('connect-assets');
|
||||
*/
|
||||
|
||||
var homeController = require('./controllers/home');
|
||||
var curriculumController = require('./controllers/curriculum');
|
||||
var userController = require('./controllers/user');
|
||||
var apiController = require('./controllers/api');
|
||||
var contactController = require('./controllers/contact');
|
||||
@ -118,6 +119,7 @@ app.use(express.static(path.join(__dirname, 'public'), { maxAge: week }));
|
||||
*/
|
||||
|
||||
app.get('/', homeController.index);
|
||||
app.get('/curriculum', curriculumController.index);
|
||||
app.get('/login', userController.getLogin);
|
||||
app.post('/login', userController.postLogin);
|
||||
app.get('/logout', userController.logout);
|
||||
|
34
bower_components/firebase/.bower.json
vendored
Normal file
34
bower_components/firebase/.bower.json
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"name": "firebase",
|
||||
"version": "1.0.24",
|
||||
"homepage": "https://firebase.com",
|
||||
"authors": [
|
||||
"Firebase <operations@firebase.com>"
|
||||
],
|
||||
"description": "Firebase Web Client",
|
||||
"main": "firebase.js",
|
||||
"keywords": [
|
||||
"Firebase",
|
||||
"synchronization",
|
||||
"real-time",
|
||||
"websocket"
|
||||
],
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"_release": "1.0.24",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.24",
|
||||
"commit": "d5706acf910628ac91b19da9074b8aa70aaed524"
|
||||
},
|
||||
"_source": "git://github.com/firebase/firebase-bower.git",
|
||||
"_target": "1.0.x",
|
||||
"_originalSource": "firebase"
|
||||
}
|
6
bower_components/firebase/README.md
vendored
Normal file
6
bower_components/firebase/README.md
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
firebase-bower
|
||||
==============
|
||||
|
||||
Firebase Bower
|
||||
|
||||
LICENSE - Refer to: https://www.firebase.com/terms/terms-of-service.html
|
25
bower_components/firebase/bower.json
vendored
Normal file
25
bower_components/firebase/bower.json
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "firebase",
|
||||
"version": "1.0.24",
|
||||
"homepage": "https://firebase.com",
|
||||
"authors": [
|
||||
"Firebase <operations@firebase.com>"
|
||||
],
|
||||
"description": "Firebase Web Client",
|
||||
"main": "firebase.js",
|
||||
"keywords": [
|
||||
"Firebase",
|
||||
"synchronization",
|
||||
"real-time",
|
||||
"websocket"
|
||||
],
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
]
|
||||
}
|
8765
bower_components/firebase/firebase-debug.js
vendored
Normal file
8765
bower_components/firebase/firebase-debug.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
159
bower_components/firebase/firebase.js
vendored
Normal file
159
bower_components/firebase/firebase.js
vendored
Normal file
@ -0,0 +1,159 @@
|
||||
/* Firebase v1.0.24 - License: https://www.firebase.com/terms/terms-of-service.html */ (function() {var scope={};(function(){"use strict";function m(c,b){if(0===c.length||0===b.length)return c.concat(b);var a=c[c.length-1],d=Math.round(a/1099511627776)||32,e;if(32===d)e=c.concat(b);else{e=b;var a=a|0,f=c.slice(0,c.length-1),g;for(void 0===f&&(f=[]);32<=d;d-=32)f.push(a),a=0;if(0===d)e=f.concat(e);else{for(g=0;g<e.length;g++)f.push(a|e[g]>>>d),a=e[g]<<32-d;g=e.length?e[e.length-1]:0;e=Math.round(g/1099511627776)||32;f.push(n(d+e&31,32<d+e?a:f.pop(),1));e=f}}return e}
|
||||
function p(c){var b=c.length;return 0===b?0:32*(b-1)+(Math.round(c[b-1]/1099511627776)||32)}function n(c,b,a){return 32===c?b:(a?b|0:b<<32-c)+1099511627776*c}function r(c){c?(this.c=c.c.slice(0),this.b=c.b.slice(0),this.a=c.a):this.reset()}
|
||||
r.prototype={d:512,reset:function(){this.c=this.e.slice(0);this.b=[];this.a=0;return this},update:function(c){if("string"===typeof c){c=unescape(encodeURIComponent(c));var b=[],a,d=0;for(a=0;a<c.length;a++)d=d<<8|c.charCodeAt(a),3===(a&3)&&(b.push(d),d=0);a&3&&b.push(n(8*(a&3),d));c=b}a=this.b=m(this.b,c);b=this.a;c=this.a=b+p(c);for(b=this.d+b&-this.d;b<=c;b+=this.d)s(this,a.splice(0,16));return this},e:[1732584193,4023233417,2562383102,271733878,3285377520],f:[1518500249,1859775393,2400959708,3395469782]};
|
||||
function s(c,b){var a,d,e,f,g,l,q,k=b.slice(0),h=c.c;e=h[0];f=h[1];g=h[2];l=h[3];q=h[4];for(a=0;79>=a;a++)16<=a&&(k[a]=(k[a-3]^k[a-8]^k[a-14]^k[a-16])<<1|(k[a-3]^k[a-8]^k[a-14]^k[a-16])>>>31),d=19>=a?f&g|~f&l:39>=a?f^g^l:59>=a?f&g|f&l|g&l:79>=a?f^g^l:void 0,d=(e<<5|e>>>27)+d+q+k[a]+c.f[Math.floor(a/20)]|0,q=l,l=g,g=f<<30|f>>>2,f=e,e=d;h[0]=h[0]+e|0;h[1]=h[1]+f|0;h[2]=h[2]+g|0;h[3]=h[3]+l|0;h[4]=h[4]+q|0}
|
||||
function t(c){var b=(new r).update(c),a,d=b.b;c=b.c;d=m(d,[n(1,1)]);for(a=d.length+2;a&15;a++)d.push(0);d.push(Math.floor(b.a/4294967296));for(d.push(b.a|0);d.length;)s(b,d.splice(0,16));b.reset();var e,b="";a=0;var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,g=p(c);e&&(d=d.substr(0,62)+"-_");for(e=0;6*b.length<g;)b+=d.charAt((f^c[e]>>>a)>>>26),6>a?(f=c[e]<<6-a,a+=26,e++):(f<<=6,a-=6);for(;b.length&3;)b+="=";return b}var u=["sjclHashToBase64"],v=this;
|
||||
u[0]in v||!v.execScript||v.execScript("var "+u[0]);for(var w;u.length&&(w=u.shift());)u.length||void 0===t?v=v[w]?v[w]:v[w]={}:v[w]=t;}).apply(scope);var sjclHashToBase64=scope['sjclHashToBase64']; var h,aa=this;function m(a){return void 0!==a}function ba(){}function ca(a){a.qb=function(){return a.hd?a.hd:a.hd=new a}}
|
||||
function da(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
|
||||
else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function ea(a){return"array"==da(a)}function fa(a){var b=da(a);return"array"==b||"object"==b&&"number"==typeof a.length}function p(a){return"string"==typeof a}function ga(a){return"number"==typeof a}function ha(a){var b=typeof a;return"object"==b&&null!=a||"function"==b}function ia(a,b,c){return a.call.apply(a.bind,arguments)}
|
||||
function ja(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function q(a,b,c){q=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?ia:ja;return q.apply(null,arguments)}
|
||||
function ka(a,b){function c(){}c.prototype=b.prototype;a.ge=b.prototype;a.prototype=new c;a.ee=function(a,c,f){return b.prototype[c].apply(a,Array.prototype.slice.call(arguments,2))}};function la(a){a=String(a);if(/^\s*$/.test(a)?0:/^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x0a-\x1f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g,"")))try{return eval("("+a+")")}catch(b){}throw Error("Invalid JSON string: "+a);}function ma(){this.mc=void 0}
|
||||
function na(a,b,c){switch(typeof b){case "string":oa(b,c);break;case "number":c.push(isFinite(b)&&!isNaN(b)?b:"null");break;case "boolean":c.push(b);break;case "undefined":c.push("null");break;case "object":if(null==b){c.push("null");break}if(ea(b)){var d=b.length;c.push("[");for(var e="",f=0;f<d;f++)c.push(e),e=b[f],na(a,a.mc?a.mc.call(b,String(f),e):e,c),e=",";c.push("]");break}c.push("{");d="";for(f in b)Object.prototype.hasOwnProperty.call(b,f)&&(e=b[f],"function"!=typeof e&&(c.push(d),oa(f,c),
|
||||
c.push(":"),na(a,a.mc?a.mc.call(b,f,e):e,c),d=","));c.push("}");break;case "function":break;default:throw Error("Unknown type: "+typeof b);}}var pa={'"':'\\"',"\\":"\\\\","/":"\\/","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\x0B":"\\u000b"},qa=/\uffff/.test("\uffff")?/[\\\"\x00-\x1f\x7f-\uffff]/g:/[\\\"\x00-\x1f\x7f-\xff]/g;
|
||||
function oa(a,b){b.push('"',a.replace(qa,function(a){if(a in pa)return pa[a];var b=a.charCodeAt(0),e="\\u";16>b?e+="000":256>b?e+="00":4096>b&&(e+="0");return pa[a]=e+b.toString(16)}),'"')};function ra(a){return"undefined"!==typeof JSON&&m(JSON.parse)?JSON.parse(a):la(a)}function u(a){if("undefined"!==typeof JSON&&m(JSON.stringify))a=JSON.stringify(a);else{var b=[];na(new ma,a,b);a=b.join("")}return a};function sa(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);55296<=e&&56319>=e&&(e-=55296,d++,v(d<a.length,"Surrogate pair missing trail surrogate."),e=65536+(e<<10)+(a.charCodeAt(d)-56320));128>e?b[c++]=e:(2048>e?b[c++]=e>>6|192:(65536>e?b[c++]=e>>12|224:(b[c++]=e>>18|240,b[c++]=e>>12&63|128),b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};var ta={};function x(a,b,c,d){var e;d<b?e="at least "+b:d>c&&(e=0===c?"none":"no more than "+c);if(e)throw Error(a+" failed: Was called with "+d+(1===d?" argument.":" arguments.")+" Expects "+e+".");}
|
||||
function y(a,b,c){var d="";switch(b){case 1:d=c?"first":"First";break;case 2:d=c?"second":"Second";break;case 3:d=c?"third":"Third";break;case 4:d=c?"fourth":"Fourth";break;default:ua.assert(!1,"errorPrefix_ called with argumentNumber > 4. Need to update it?")}return a=a+" failed: "+(d+" argument ")}function z(a,b,c,d){if((!d||m(c))&&"function"!=da(c))throw Error(y(a,b,d)+"must be a valid function.");}
|
||||
function va(a,b,c){if(m(c)&&(!ha(c)||null===c))throw Error(y(a,b,!0)+"must be a valid context object.");};function A(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function wa(a,b){if(Object.prototype.hasOwnProperty.call(a,b))return a[b]};var ua={},xa=/[\[\].#$\/\u0000-\u001F\u007F]/,ya=/[\[\].#$\u0000-\u001F\u007F]/;function za(a){return p(a)&&0!==a.length&&!xa.test(a)}function Aa(a,b,c){c&&!m(b)||Ba(y(a,1,c),b)}
|
||||
function Ba(a,b,c,d){c||(c=0);d=d||[];if(!m(b))throw Error(a+"contains undefined"+Ca(d));if("function"==da(b))throw Error(a+"contains a function"+Ca(d)+" with contents: "+b.toString());if(Da(b))throw Error(a+"contains "+b.toString()+Ca(d));if(1E3<c)throw new TypeError(a+"contains a cyclic object value ("+d.slice(0,100).join(".")+"...)");if(p(b)&&b.length>10485760/3&&10485760<sa(b).length)throw Error(a+"contains a string greater than 10485760 utf8 bytes"+Ca(d)+" ('"+b.substring(0,50)+"...')");if(ha(b))for(var e in b)if(A(b,
|
||||
e)){var f=b[e];if(".priority"!==e&&".value"!==e&&".sv"!==e&&!za(e))throw Error(a+" contains an invalid key ("+e+")"+Ca(d)+'. Keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]"');d.push(e);Ba(a,f,c+1,d);d.pop()}}function Ca(a){return 0==a.length?"":" in property '"+a.join(".")+"'"}function Ea(a,b){if(!ha(b)||ea(b))throw Error(y(a,1,!1)+" must be an Object containing the children to replace.");Aa(a,b,!1)}
|
||||
function Fa(a,b,c,d){if(!d||m(c)){if(Da(c))throw Error(y(a,b,d)+"is "+c.toString()+", but must be a valid Firebase priority (a string, finite number, or null).");if(!(null===c||ga(c)||p(c)||ha(c)&&A(c,".sv")))throw Error(y(a,b,d)+"must be a valid Firebase priority (a string, finite number, or null).");}}
|
||||
function Ga(a,b,c){if(!c||m(b))switch(b){case "value":case "child_added":case "child_removed":case "child_changed":case "child_moved":break;default:throw Error(y(a,1,c)+'must be a valid event type: "value", "child_added", "child_removed", "child_changed", or "child_moved".');}}function Ha(a,b){if(m(b)&&!za(b))throw Error(y(a,2,!0)+'was an invalid key: "'+b+'". Firebase keys must be non-empty strings and can\'t contain ".", "#", "$", "/", "[", or "]").');}
|
||||
function Ia(a,b){if(!p(b)||0===b.length||ya.test(b))throw Error(y(a,1,!1)+'was an invalid path: "'+b+'". Paths must be non-empty strings and can\'t contain ".", "#", "$", "[", or "]"');}function B(a,b){if(".info"===C(b))throw Error(a+" failed: Can't modify data under /.info/");};function D(a,b,c,d,e,f,g){this.m=a;this.path=b;this.Da=c;this.da=d;this.wa=e;this.Ba=f;this.Xa=g;if(m(this.da)&&m(this.Ba)&&m(this.Da))throw"Query: Can't combine startAt(), endAt(), and limit().";}D.prototype.Qc=function(){x("Query.ref",0,0,arguments.length);return new E(this.m,this.path)};D.prototype.ref=D.prototype.Qc;
|
||||
D.prototype.eb=function(a,b){x("Query.on",2,4,arguments.length);Ga("Query.on",a,!1);z("Query.on",2,b,!1);var c=Ja("Query.on",arguments[2],arguments[3]);this.m.Qb(this,a,b,c.cancel,c.Y);return b};D.prototype.on=D.prototype.eb;D.prototype.xb=function(a,b,c){x("Query.off",0,3,arguments.length);Ga("Query.off",a,!0);z("Query.off",2,b,!0);va("Query.off",3,c);this.m.lc(this,a,b,c)};D.prototype.off=D.prototype.xb;
|
||||
D.prototype.Td=function(a,b){function c(g){f&&(f=!1,e.xb(a,c),b.call(d.Y,g))}x("Query.once",2,4,arguments.length);Ga("Query.once",a,!1);z("Query.once",2,b,!1);var d=Ja("Query.once",arguments[2],arguments[3]),e=this,f=!0;this.eb(a,c,function(b){e.xb(a,c);d.cancel&&d.cancel.call(d.Y,b)})};D.prototype.once=D.prototype.Td;
|
||||
D.prototype.Md=function(a){x("Query.limit",1,1,arguments.length);if(!ga(a)||Math.floor(a)!==a||0>=a)throw"Query.limit: First argument must be a positive integer.";return new D(this.m,this.path,a,this.da,this.wa,this.Ba,this.Xa)};D.prototype.limit=D.prototype.Md;D.prototype.wd=function(a,b){x("Query.startAt",0,2,arguments.length);Fa("Query.startAt",1,a,!0);Ha("Query.startAt",b);m(a)||(b=a=null);return new D(this.m,this.path,this.Da,a,b,this.Ba,this.Xa)};D.prototype.startAt=D.prototype.wd;
|
||||
D.prototype.cd=function(a,b){x("Query.endAt",0,2,arguments.length);Fa("Query.endAt",1,a,!0);Ha("Query.endAt",b);return new D(this.m,this.path,this.Da,this.da,this.wa,a,b)};D.prototype.endAt=D.prototype.cd;D.prototype.Gd=function(a,b){x("Query.equalTo",1,2,arguments.length);Fa("Query.equalTo",1,a,!1);Ha("Query.equalTo",b);return this.wd(a,b).cd(a,b)};D.prototype.equalTo=D.prototype.Gd;
|
||||
function Ka(a){var b={};m(a.da)&&(b.sp=a.da);m(a.wa)&&(b.sn=a.wa);m(a.Ba)&&(b.ep=a.Ba);m(a.Xa)&&(b.en=a.Xa);m(a.Da)&&(b.l=a.Da);m(a.da)&&m(a.wa)&&null===a.da&&null===a.wa&&(b.vf="l");return b}D.prototype.Ra=function(){var a=La(Ka(this));return"{}"===a?"default":a};
|
||||
function Ja(a,b,c){var d={};if(b&&c)d.cancel=b,z(a,3,d.cancel,!0),d.Y=c,va(a,4,d.Y);else if(b)if("object"===typeof b&&null!==b)d.Y=b;else if("function"===typeof b)d.cancel=b;else throw Error(ta.fe(a,3,!0)+"must either be a cancel callback or a context object.");return d};function F(a,b){if(1==arguments.length){this.o=a.split("/");for(var c=0,d=0;d<this.o.length;d++)0<this.o[d].length&&(this.o[c]=this.o[d],c++);this.o.length=c;this.U=0}else this.o=a,this.U=b}function C(a){return a.U>=a.o.length?null:a.o[a.U]}function Ma(a){var b=a.U;b<a.o.length&&b++;return new F(a.o,b)}function Na(a){return a.U<a.o.length?a.o[a.o.length-1]:null}h=F.prototype;h.toString=function(){for(var a="",b=this.U;b<this.o.length;b++)""!==this.o[b]&&(a+="/"+this.o[b]);return a||"/"};
|
||||
h.parent=function(){if(this.U>=this.o.length)return null;for(var a=[],b=this.U;b<this.o.length-1;b++)a.push(this.o[b]);return new F(a,0)};h.G=function(a){for(var b=[],c=this.U;c<this.o.length;c++)b.push(this.o[c]);if(a instanceof F)for(c=a.U;c<a.o.length;c++)b.push(a.o[c]);else for(a=a.split("/"),c=0;c<a.length;c++)0<a[c].length&&b.push(a[c]);return new F(b,0)};h.f=function(){return this.U>=this.o.length};h.length=function(){return this.o.length-this.U};
|
||||
function Oa(a,b){var c=C(a);if(null===c)return b;if(c===C(b))return Oa(Ma(a),Ma(b));throw"INTERNAL ERROR: innerPath ("+b+") is not within outerPath ("+a+")";}h.contains=function(a){var b=this.U,c=a.U;if(this.length()>a.length())return!1;for(;b<this.o.length;){if(this.o[b]!==a.o[c])return!1;++b;++c}return!0};function Pa(){this.children={};this.wc=0;this.value=null}function Qa(a,b,c){this.Ea=a?a:"";this.Db=b?b:null;this.C=c?c:new Pa}function I(a,b){for(var c=b instanceof F?b:new F(b),d=a,e;null!==(e=C(c));)d=new Qa(e,d,wa(d.C.children,e)||new Pa),c=Ma(c);return d}h=Qa.prototype;h.j=function(){return this.C.value};function J(a,b){v("undefined"!==typeof b,"Cannot set value to undefined");a.C.value=b;Ra(a)}h.rb=function(){return 0<this.C.wc};h.f=function(){return null===this.j()&&!this.rb()};
|
||||
h.A=function(a){for(var b in this.C.children)a(new Qa(b,this,this.C.children[b]))};function Sa(a,b,c,d){c&&!d&&b(a);a.A(function(a){Sa(a,b,!0,d)});c&&d&&b(a)}function Ta(a,b,c){for(a=c?a:a.parent();null!==a;){if(b(a))return!0;a=a.parent()}return!1}h.path=function(){return new F(null===this.Db?this.Ea:this.Db.path()+"/"+this.Ea)};h.name=function(){return this.Ea};h.parent=function(){return this.Db};
|
||||
function Ra(a){if(null!==a.Db){var b=a.Db,c=a.Ea,d=a.f(),e=A(b.C.children,c);d&&e?(delete b.C.children[c],b.C.wc--,Ra(b)):d||e||(b.C.children[c]=a.C,b.C.wc++,Ra(b))}};function Ua(a,b){this.Va=a?a:Va;this.ca=b?b:Wa}function Va(a,b){return a<b?-1:a>b?1:0}h=Ua.prototype;h.qa=function(a,b){return new Ua(this.Va,this.ca.qa(a,b,this.Va).J(null,null,!1,null,null))};h.remove=function(a){return new Ua(this.Va,this.ca.remove(a,this.Va).J(null,null,!1,null,null))};h.get=function(a){for(var b,c=this.ca;!c.f();){b=this.Va(a,c.key);if(0===b)return c.value;0>b?c=c.left:0<b&&(c=c.right)}return null};
|
||||
function Xa(a,b){for(var c,d=a.ca,e=null;!d.f();){c=a.Va(b,d.key);if(0===c){if(d.left.f())return e?e.key:null;for(d=d.left;!d.right.f();)d=d.right;return d.key}0>c?d=d.left:0<c&&(e=d,d=d.right)}throw Error("Attempted to find predecessor key for a nonexistent key. What gives?");}h.f=function(){return this.ca.f()};h.count=function(){return this.ca.count()};h.wb=function(){return this.ca.wb()};h.ab=function(){return this.ca.ab()};h.Ca=function(a){return this.ca.Ca(a)};h.Sa=function(a){return this.ca.Sa(a)};
|
||||
h.$a=function(a){return new Ya(this.ca,a)};function Ya(a,b){this.rd=b;for(this.$b=[];!a.f();)this.$b.push(a),a=a.left}function Za(a){if(0===a.$b.length)return null;var b=a.$b.pop(),c;c=a.rd?a.rd(b.key,b.value):{key:b.key,value:b.value};for(b=b.right;!b.f();)a.$b.push(b),b=b.left;return c}function $a(a,b,c,d,e){this.key=a;this.value=b;this.color=null!=c?c:!0;this.left=null!=d?d:Wa;this.right=null!=e?e:Wa}h=$a.prototype;
|
||||
h.J=function(a,b,c,d,e){return new $a(null!=a?a:this.key,null!=b?b:this.value,null!=c?c:this.color,null!=d?d:this.left,null!=e?e:this.right)};h.count=function(){return this.left.count()+1+this.right.count()};h.f=function(){return!1};h.Ca=function(a){return this.left.Ca(a)||a(this.key,this.value)||this.right.Ca(a)};h.Sa=function(a){return this.right.Sa(a)||a(this.key,this.value)||this.left.Sa(a)};function cb(a){return a.left.f()?a:cb(a.left)}h.wb=function(){return cb(this).key};
|
||||
h.ab=function(){return this.right.f()?this.key:this.right.ab()};h.qa=function(a,b,c){var d,e;e=this;d=c(a,e.key);e=0>d?e.J(null,null,null,e.left.qa(a,b,c),null):0===d?e.J(null,b,null,null,null):e.J(null,null,null,null,e.right.qa(a,b,c));return db(e)};function eb(a){if(a.left.f())return Wa;a.left.P()||a.left.left.P()||(a=fb(a));a=a.J(null,null,null,eb(a.left),null);return db(a)}
|
||||
h.remove=function(a,b){var c,d;c=this;if(0>b(a,c.key))c.left.f()||c.left.P()||c.left.left.P()||(c=fb(c)),c=c.J(null,null,null,c.left.remove(a,b),null);else{c.left.P()&&(c=gb(c));c.right.f()||c.right.P()||c.right.left.P()||(c=hb(c),c.left.left.P()&&(c=gb(c),c=hb(c)));if(0===b(a,c.key)){if(c.right.f())return Wa;d=cb(c.right);c=c.J(d.key,d.value,null,null,eb(c.right))}c=c.J(null,null,null,null,c.right.remove(a,b))}return db(c)};h.P=function(){return this.color};
|
||||
function db(a){a.right.P()&&!a.left.P()&&(a=ib(a));a.left.P()&&a.left.left.P()&&(a=gb(a));a.left.P()&&a.right.P()&&(a=hb(a));return a}function fb(a){a=hb(a);a.right.left.P()&&(a=a.J(null,null,null,null,gb(a.right)),a=ib(a),a=hb(a));return a}function ib(a){return a.right.J(null,null,a.color,a.J(null,null,!0,null,a.right.left),null)}function gb(a){return a.left.J(null,null,a.color,null,a.J(null,null,!0,a.left.right,null))}
|
||||
function hb(a){return a.J(null,null,!a.color,a.left.J(null,null,!a.left.color,null,null),a.right.J(null,null,!a.right.color,null,null))}function jb(){}h=jb.prototype;h.J=function(){return this};h.qa=function(a,b){return new $a(a,b,null)};h.remove=function(){return this};h.count=function(){return 0};h.f=function(){return!0};h.Ca=function(){return!1};h.Sa=function(){return!1};h.wb=function(){return null};h.ab=function(){return null};h.P=function(){return!1};var Wa=new jb;function kb(a){this.Ub=a;this.hc="firebase:"}kb.prototype.set=function(a,b){null==b?this.Ub.removeItem(this.hc+a):this.Ub.setItem(this.hc+a,u(b))};kb.prototype.get=function(a){a=this.Ub.getItem(this.hc+a);return null==a?null:ra(a)};kb.prototype.remove=function(a){this.Ub.removeItem(this.hc+a)};kb.prototype.kd=!1;function lb(){this.mb={}}lb.prototype.set=function(a,b){null==b?delete this.mb[a]:this.mb[a]=b};lb.prototype.get=function(a){return A(this.mb,a)?this.mb[a]:null};lb.prototype.remove=function(a){delete this.mb[a]};lb.prototype.kd=!0;function mb(a){try{if("undefined"!==typeof window&&"undefined"!==typeof window[a]){var b=window[a];b.setItem("firebase:sentinel","cache");b.removeItem("firebase:sentinel");return new kb(b)}}catch(c){}return new lb}var nb=mb("localStorage"),ob=mb("sessionStorage");function pb(a,b,c,d){this.host=a.toLowerCase();this.domain=this.host.substr(this.host.indexOf(".")+1);this.nc=b;this.Zb=c;this.ce=d;this.ga=nb.get("host:"+a)||this.host}function qb(a,b){b!==a.ga&&(a.ga=b,"s-"===a.ga.substr(0,2)&&nb.set("host:"+a.host,a.ga))}pb.prototype.toString=function(){return(this.nc?"https://":"http://")+this.host};var rb=Array.prototype,sb=rb.forEach?function(a,b,c){rb.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)},tb=rb.map?function(a,b,c){return rb.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=p(a)?a.split(""):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e},ub=rb.reduce?function(a,b,c,d){d&&(b=q(b,d));return rb.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;sb(a,function(c,g){e=b.call(d,e,c,g,a)});return e},
|
||||
vb=rb.every?function(a,b,c){return rb.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=p(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};function wb(a,b){var c;a:{c=a.length;for(var d=p(a)?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){c=e;break a}c=-1}return 0>c?null:p(a)?a.charAt(c):a[c]};var xb;a:{var yb=aa.navigator;if(yb){var zb=yb.userAgent;if(zb){xb=zb;break a}}xb=""}function Ab(a){return-1!=xb.indexOf(a)};var Bb=Ab("Opera")||Ab("OPR"),Cb=Ab("Trident")||Ab("MSIE"),Db=Ab("Gecko")&&-1==xb.toLowerCase().indexOf("webkit")&&!(Ab("Trident")||Ab("MSIE")),Eb=-1!=xb.toLowerCase().indexOf("webkit");(function(){var a="",b;if(Bb&&aa.opera)return a=aa.opera.version,"function"==da(a)?a():a;Db?b=/rv\:([^\);]+)(\)|;)/:Cb?b=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:Eb&&(b=/WebKit\/(\S+)/);b&&(a=(a=b.exec(xb))?a[1]:"");return Cb&&(b=(b=aa.document)?b.documentMode:void 0,b>parseFloat(a))?String(b):a})();var Fb=null,Gb=null;var Hb=function(){var a=1;return function(){return a++}}();function v(a,b){if(!a)throw Error("Firebase INTERNAL ASSERT FAILED:"+b);}function Ib(a){for(var b="",c=0;c<arguments.length;c++)b=fa(arguments[c])?b+Ib.apply(null,arguments[c]):"object"===typeof arguments[c]?b+u(arguments[c]):b+arguments[c],b+=" ";return b}var Jb=null,Kb=!0;function K(a){!0===Kb&&(Kb=!1,null===Jb&&!0===ob.get("logging_enabled")&&Lb(!0));if(Jb){var b=Ib.apply(null,arguments);Jb(b)}}
|
||||
function Mb(a){return function(){K(a,arguments)}}function Nb(a){if("undefined"!==typeof console){var b="FIREBASE INTERNAL ERROR: "+Ib.apply(null,arguments);"undefined"!==typeof console.error?console.error(b):console.log(b)}}function Ob(a){var b=Ib.apply(null,arguments);throw Error("FIREBASE FATAL ERROR: "+b);}function L(a){if("undefined"!==typeof console){var b="FIREBASE WARNING: "+Ib.apply(null,arguments);"undefined"!==typeof console.warn?console.warn(b):console.log(b)}}
|
||||
function Da(a){return ga(a)&&(a!=a||a==Number.POSITIVE_INFINITY||a==Number.NEGATIVE_INFINITY)}function Pb(a){if("complete"===document.readyState)a();else{var b=!1,c=function(){document.body?b||(b=!0,a()):setTimeout(c,Math.floor(10))};document.addEventListener?(document.addEventListener("DOMContentLoaded",c,!1),window.addEventListener("load",c,!1)):document.attachEvent&&(document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&c()}),window.attachEvent("onload",c))}}
|
||||
function Qb(a,b){return a!==b?null===a?-1:null===b?1:typeof a!==typeof b?"number"===typeof a?-1:1:a>b?1:-1:0}function Rb(a,b){if(a===b)return 0;var c=Sb(a),d=Sb(b);return null!==c?null!==d?0==c-d?a.length-b.length:c-d:-1:null!==d?1:a<b?-1:1}function Tb(a,b){if(b&&a in b)return b[a];throw Error("Missing required key ("+a+") in object: "+u(b));}
|
||||
function La(a){if("object"!==typeof a||null===a)return u(a);var b=[],c;for(c in a)b.push(c);b.sort();c="{";for(var d=0;d<b.length;d++)0!==d&&(c+=","),c+=u(b[d]),c+=":",c+=La(a[b[d]]);return c+"}"}function Ub(a,b){if(a.length<=b)return[a];for(var c=[],d=0;d<a.length;d+=b)d+b>a?c.push(a.substring(d,a.length)):c.push(a.substring(d,d+b));return c}function Vb(a,b){if(ea(a))for(var c=0;c<a.length;++c)b(c,a[c]);else Wb(a,b)}function Xb(a,b){return b?q(a,b):a}
|
||||
function Yb(a){v(!Da(a),"Invalid JSON number");var b,c,d,e;0===a?(d=c=0,b=-Infinity===1/a?1:0):(b=0>a,a=Math.abs(a),a>=Math.pow(2,-1022)?(d=Math.min(Math.floor(Math.log(a)/Math.LN2),1023),c=d+1023,d=Math.round(a*Math.pow(2,52-d)-Math.pow(2,52))):(c=0,d=Math.round(a/Math.pow(2,-1074))));e=[];for(a=52;a;a-=1)e.push(d%2?1:0),d=Math.floor(d/2);for(a=11;a;a-=1)e.push(c%2?1:0),c=Math.floor(c/2);e.push(b?1:0);e.reverse();b=e.join("");c="";for(a=0;64>a;a+=8)d=parseInt(b.substr(a,8),2).toString(16),1===d.length&&
|
||||
(d="0"+d),c+=d;return c.toLowerCase()}function Zb(a){var b="Unknown Error";"too_big"===a?b="The data requested exceeds the maximum size that can be accessed with a single request.":"permission_denied"==a?b="Client doesn't have permission to access the desired data.":"unavailable"==a&&(b="The service is unavailable");b=Error(a+": "+b);b.code=a.toUpperCase();return b}var $b=/^-?\d{1,10}$/;function Sb(a){return $b.test(a)&&(a=Number(a),-2147483648<=a&&2147483647>=a)?a:null}
|
||||
function ac(a){try{a()}catch(b){setTimeout(function(){throw b;},Math.floor(0))}};function bc(a,b){this.F=a;v(null!==this.F,"LeafNode shouldn't be created with null value.");this.fb="undefined"!==typeof b?b:null}h=bc.prototype;h.O=function(){return!0};h.k=function(){return this.fb};h.Ha=function(a){return new bc(this.F,a)};h.N=function(){return M};h.K=function(a){return null===C(a)?this:M};h.fa=function(){return null};h.H=function(a,b){return(new N).H(a,b).Ha(this.fb)};h.ya=function(a,b){var c=C(a);return null===c?b:this.H(c,M.ya(Ma(a),b))};h.f=function(){return!1};h.ac=function(){return 0};
|
||||
h.V=function(a){return a&&null!==this.k()?{".value":this.j(),".priority":this.k()}:this.j()};h.hash=function(){var a="";null!==this.k()&&(a+="priority:"+cc(this.k())+":");var b=typeof this.F,a=a+(b+":"),a="number"===b?a+Yb(this.F):a+this.F;return sjclHashToBase64(a)};h.j=function(){return this.F};h.toString=function(){return"string"===typeof this.F?this.F:'"'+this.F+'"'};function dc(a,b){return Qb(a.ja,b.ja)||Rb(a.name,b.name)}function ec(a,b){return Rb(a.name,b.name)}function fc(a,b){return Rb(a,b)};function N(a,b){this.n=a||new Ua(fc);this.fb="undefined"!==typeof b?b:null}h=N.prototype;h.O=function(){return!1};h.k=function(){return this.fb};h.Ha=function(a){return new N(this.n,a)};h.H=function(a,b){var c=this.n.remove(a);b&&b.f()&&(b=null);null!==b&&(c=c.qa(a,b));return b&&null!==b.k()?new gc(c,null,this.fb):new N(c,this.fb)};h.ya=function(a,b){var c=C(a);if(null===c)return b;var d=this.N(c).ya(Ma(a),b);return this.H(c,d)};h.f=function(){return this.n.f()};h.ac=function(){return this.n.count()};
|
||||
var ic=/^(0|[1-9]\d*)$/;h=N.prototype;h.V=function(a){if(this.f())return null;var b={},c=0,d=0,e=!0;this.A(function(f,g){b[f]=g.V(a);c++;e&&ic.test(f)?d=Math.max(d,Number(f)):e=!1});if(!a&&e&&d<2*c){var f=[],g;for(g in b)f[g]=b[g];return f}a&&null!==this.k()&&(b[".priority"]=this.k());return b};h.hash=function(){var a="";null!==this.k()&&(a+="priority:"+cc(this.k())+":");this.A(function(b,c){var d=c.hash();""!==d&&(a+=":"+b+":"+d)});return""===a?"":sjclHashToBase64(a)};
|
||||
h.N=function(a){a=this.n.get(a);return null===a?M:a};h.K=function(a){var b=C(a);return null===b?this:this.N(b).K(Ma(a))};h.fa=function(a){return Xa(this.n,a)};h.ed=function(){return this.n.wb()};h.gd=function(){return this.n.ab()};h.A=function(a){return this.n.Ca(a)};h.Bc=function(a){return this.n.Sa(a)};h.$a=function(){return this.n.$a()};h.toString=function(){var a="{",b=!0;this.A(function(c,d){b?b=!1:a+=", ";a+='"'+c+'" : '+d.toString()});return a+="}"};var M=new N;function gc(a,b,c){N.call(this,a,c);null===b&&(b=new Ua(dc),a.Ca(function(a,c){b=b.qa({name:a,ja:c.k()},c)}));this.va=b}ka(gc,N);h=gc.prototype;h.H=function(a,b){var c=this.N(a),d=this.n,e=this.va;null!==c&&(d=d.remove(a),e=e.remove({name:a,ja:c.k()}));b&&b.f()&&(b=null);null!==b&&(d=d.qa(a,b),e=e.qa({name:a,ja:b.k()},b));return new gc(d,e,this.k())};h.fa=function(a,b){var c=Xa(this.va,{name:a,ja:b.k()});return c?c.name:null};h.A=function(a){return this.va.Ca(function(b,c){return a(b.name,c)})};
|
||||
h.Bc=function(a){return this.va.Sa(function(b,c){return a(b.name,c)})};h.$a=function(){return this.va.$a(function(a,b){return{key:a.name,value:b}})};h.ed=function(){return this.va.f()?null:this.va.wb().name};h.gd=function(){return this.va.f()?null:this.va.ab().name};function O(a,b){if(null===a)return M;var c=null;"object"===typeof a&&".priority"in a?c=a[".priority"]:"undefined"!==typeof b&&(c=b);v(null===c||"string"===typeof c||"number"===typeof c||"object"===typeof c&&".sv"in c,"Invalid priority type found: "+typeof c);"object"===typeof a&&".value"in a&&null!==a[".value"]&&(a=a[".value"]);if("object"!==typeof a||".sv"in a)return new bc(a,c);if(a instanceof Array){var d=M,e=a;Wb(e,function(a,b){if(A(e,b)&&"."!==b.substring(0,1)){var c=O(a);if(c.O()||!c.f())d=
|
||||
d.H(b,c)}});return d.Ha(c)}var f=[],g={},k=!1,l=a;Vb(l,function(a,b){if("string"!==typeof b||"."!==b.substring(0,1)){var c=O(l[b]);c.f()||(k=k||null!==c.k(),f.push({name:b,ja:c.k()}),g[b]=c)}});var n=jc(f,g,!1);if(k){var r=jc(f,g,!0);return new gc(n,r,c)}return new N(n,c)}var kc=Math.log(2);function lc(a){this.count=parseInt(Math.log(a+1)/kc,10);this.ad=this.count-1;this.Dd=a+1&parseInt(Array(this.count+1).join("1"),2)}function mc(a){var b=!(a.Dd&1<<a.ad);a.ad--;return b}
|
||||
function jc(a,b,c){function d(e,f){var l=f-e;if(0==l)return null;if(1==l){var l=a[e].name,n=c?a[e]:l;return new $a(n,b[l],!1,null,null)}var n=parseInt(l/2,10)+e,r=d(e,n),t=d(n+1,f),l=a[n].name,n=c?a[n]:l;return new $a(n,b[l],!1,r,t)}var e=c?dc:ec;a.sort(e);var f=function(e){function f(e,g){var k=r-e,t=r;r-=e;var s=a[k].name,k=new $a(c?a[k]:s,b[s],g,null,d(k+1,t));l?l.left=k:n=k;l=k}for(var l=null,n=null,r=a.length,t=0;t<e.count;++t){var s=mc(e),w=Math.pow(2,e.count-(t+1));s?f(w,!1):(f(w,!1),f(w,!0))}return n}(new lc(a.length)),
|
||||
e=c?dc:fc;return null!==f?new Ua(e,f):new Ua(e)}function cc(a){return"number"===typeof a?"number:"+Yb(a):"string:"+a};function P(a,b){this.C=a;this.kc=b}P.prototype.V=function(){x("Firebase.DataSnapshot.val",0,0,arguments.length);return this.C.V()};P.prototype.val=P.prototype.V;P.prototype.Hd=function(){x("Firebase.DataSnapshot.exportVal",0,0,arguments.length);return this.C.V(!0)};P.prototype.exportVal=P.prototype.Hd;P.prototype.G=function(a){x("Firebase.DataSnapshot.child",0,1,arguments.length);ga(a)&&(a=String(a));Ia("Firebase.DataSnapshot.child",a);var b=new F(a),c=this.kc.G(b);return new P(this.C.K(b),c)};
|
||||
P.prototype.child=P.prototype.G;P.prototype.Ec=function(a){x("Firebase.DataSnapshot.hasChild",1,1,arguments.length);Ia("Firebase.DataSnapshot.hasChild",a);var b=new F(a);return!this.C.K(b).f()};P.prototype.hasChild=P.prototype.Ec;P.prototype.k=function(){x("Firebase.DataSnapshot.getPriority",0,0,arguments.length);return this.C.k()};P.prototype.getPriority=P.prototype.k;
|
||||
P.prototype.forEach=function(a){x("Firebase.DataSnapshot.forEach",1,1,arguments.length);z("Firebase.DataSnapshot.forEach",1,a,!1);if(this.C.O())return!1;var b=this;return this.C.A(function(c,d){return a(new P(d,b.kc.G(c)))})};P.prototype.forEach=P.prototype.forEach;P.prototype.rb=function(){x("Firebase.DataSnapshot.hasChildren",0,0,arguments.length);return this.C.O()?!1:!this.C.f()};P.prototype.hasChildren=P.prototype.rb;
|
||||
P.prototype.name=function(){x("Firebase.DataSnapshot.name",0,0,arguments.length);return this.kc.name()};P.prototype.name=P.prototype.name;P.prototype.ac=function(){x("Firebase.DataSnapshot.numChildren",0,0,arguments.length);return this.C.ac()};P.prototype.numChildren=P.prototype.ac;P.prototype.Qc=function(){x("Firebase.DataSnapshot.ref",0,0,arguments.length);return this.kc};P.prototype.ref=P.prototype.Qc;function nc(a){v(ea(a)&&0<a.length,"Requires a non-empty array");this.Cd=a;this.vb={}}nc.prototype.Yc=function(a,b){for(var c=this.vb[a]||[],d=0;d<c.length;d++)c[d].aa.apply(c[d].Y,Array.prototype.slice.call(arguments,1))};nc.prototype.eb=function(a,b,c){oc(this,a);this.vb[a]=this.vb[a]||[];this.vb[a].push({aa:b,Y:c});(a=this.fd(a))&&b.apply(c,a)};nc.prototype.xb=function(a,b,c){oc(this,a);a=this.vb[a]||[];for(var d=0;d<a.length;d++)if(a[d].aa===b&&(!c||c===a[d].Y)){a.splice(d,1);break}};
|
||||
function oc(a,b){v(wb(a.Cd,function(a){return a===b}),"Unknown event: "+b)};function pc(){nc.call(this,["visible"]);var a,b;"undefined"!==typeof document&&"undefined"!==typeof document.addEventListener&&("undefined"!==typeof document.hidden?(b="visibilitychange",a="hidden"):"undefined"!==typeof document.mozHidden?(b="mozvisibilitychange",a="mozHidden"):"undefined"!==typeof document.msHidden?(b="msvisibilitychange",a="msHidden"):"undefined"!==typeof document.webkitHidden&&(b="webkitvisibilitychange",a="webkitHidden"));this.kb=!0;if(b){var c=this;document.addEventListener(b,
|
||||
function(){var b=!document[a];b!==c.kb&&(c.kb=b,c.Yc("visible",b))},!1)}}ka(pc,nc);ca(pc);pc.prototype.fd=function(a){v("visible"===a,"Unknown event type: "+a);return[this.kb]};function qc(){nc.call(this,["online"]);this.Bb=!0;if("undefined"!==typeof window&&"undefined"!==typeof window.addEventListener){var a=this;window.addEventListener("online",function(){a.Bb||a.Yc("online",!0);a.Bb=!0},!1);window.addEventListener("offline",function(){a.Bb&&a.Yc("online",!1);a.Bb=!1},!1)}}ka(qc,nc);ca(qc);qc.prototype.fd=function(a){v("online"===a,"Unknown event type: "+a);return[this.Bb]};function Wb(a,b){for(var c in a)b.call(void 0,a[c],c,a)}function rc(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}function sc(a){var b={},c;for(c in a)b[c]=a[c];return b};function tc(){this.nb={}}function uc(a,b,c){m(c)||(c=1);A(a.nb,b)||(a.nb[b]=0);a.nb[b]+=c}tc.prototype.get=function(){return sc(this.nb)};function vc(a){this.Ed=a;this.Wb=null}vc.prototype.get=function(){var a=this.Ed.get(),b=sc(a);if(this.Wb)for(var c in this.Wb)b[c]-=this.Wb[c];this.Wb=a;return b};function wc(a,b){this.Vc={};this.qc=new vc(a);this.u=b;var c=1E4+2E4*Math.random();setTimeout(q(this.pd,this),Math.floor(c))}wc.prototype.pd=function(){var a=this.qc.get(),b={},c=!1,d;for(d in a)0<a[d]&&A(this.Vc,d)&&(b[d]=a[d],c=!0);c&&(a=this.u,a.R&&(b={c:b},a.e("reportStats",b),a.Fa("s",b)));setTimeout(q(this.pd,this),Math.floor(6E5*Math.random()))};var xc={},yc={};function zc(a){a=a.toString();xc[a]||(xc[a]=new tc);return xc[a]}function Ac(a,b){var c=a.toString();yc[c]||(yc[c]=b());return yc[c]};var Bc=null;"undefined"!==typeof MozWebSocket?Bc=MozWebSocket:"undefined"!==typeof WebSocket&&(Bc=WebSocket);function Q(a,b,c){this.yc=a;this.e=Mb(this.yc);this.frames=this.tb=null;this.Ia=this.Ja=this.Xc=0;this.ea=zc(b);this.za=(b.nc?"wss://":"ws://")+b.ga+"/.ws?v=5";"undefined"!==typeof location&&location.href&&-1!==location.href.indexOf("firebaseio.com")&&(this.za+="&r=f");b.host!==b.ga&&(this.za=this.za+"&ns="+b.Zb);c&&(this.za=this.za+"&s="+c)}var Cc;
|
||||
Q.prototype.open=function(a,b){this.ia=b;this.Qd=a;this.e("Websocket connecting to "+this.za);this.W=new Bc(this.za);this.ob=!1;nb.set("previous_websocket_failure",!0);var c=this;this.W.onopen=function(){c.e("Websocket connected.");c.ob=!0};this.W.onclose=function(){c.e("Websocket connection was disconnected.");c.W=null;c.Qa()};this.W.onmessage=function(a){if(null!==c.W)if(a=a.data,c.Ia+=a.length,uc(c.ea,"bytes_received",a.length),Dc(c),null!==c.frames)Ec(c,a);else{a:{v(null===c.frames,"We already have a frame buffer");
|
||||
if(6>=a.length){var b=Number(a);if(!isNaN(b)){c.Xc=b;c.frames=[];a=null;break a}}c.Xc=1;c.frames=[]}null!==a&&Ec(c,a)}};this.W.onerror=function(a){c.e("WebSocket error. Closing connection.");(a=a.message||a.data)&&c.e(a);c.Qa()}};Q.prototype.start=function(){};Q.isAvailable=function(){var a=!1;if("undefined"!==typeof navigator&&navigator.userAgent){var b=navigator.userAgent.match(/Android ([0-9]{0,}\.[0-9]{0,})/);b&&1<b.length&&4.4>parseFloat(b[1])&&(a=!0)}return!a&&null!==Bc&&!Cc};
|
||||
Q.responsesRequiredToBeHealthy=2;Q.healthyTimeout=3E4;h=Q.prototype;h.Xb=function(){nb.remove("previous_websocket_failure")};function Ec(a,b){a.frames.push(b);if(a.frames.length==a.Xc){var c=a.frames.join("");a.frames=null;c=ra(c);a.Qd(c)}}h.send=function(a){Dc(this);a=u(a);this.Ja+=a.length;uc(this.ea,"bytes_sent",a.length);a=Ub(a,16384);1<a.length&&this.W.send(String(a.length));for(var b=0;b<a.length;b++)this.W.send(a[b])};
|
||||
h.Lb=function(){this.Na=!0;this.tb&&(clearInterval(this.tb),this.tb=null);this.W&&(this.W.close(),this.W=null)};h.Qa=function(){this.Na||(this.e("WebSocket is closing itself"),this.Lb(),this.ia&&(this.ia(this.ob),this.ia=null))};h.close=function(){this.Na||(this.e("WebSocket is being closed"),this.Lb())};function Dc(a){clearInterval(a.tb);a.tb=setInterval(function(){a.W&&a.W.send("0");Dc(a)},Math.floor(45E3))};function Fc(a){this.Lc=a;this.gc=[];this.Wa=0;this.xc=-1;this.Pa=null}function Gc(a,b,c){a.xc=b;a.Pa=c;a.xc<a.Wa&&(a.Pa(),a.Pa=null)}function Hc(a,b,c){for(a.gc[b]=c;a.gc[a.Wa];){var d=a.gc[a.Wa];delete a.gc[a.Wa];for(var e=0;e<d.length;++e)if(d[e]){var f=a;ac(function(){f.Lc(d[e])})}if(a.Wa===a.xc){a.Pa&&(clearTimeout(a.Pa),a.Pa(),a.Pa=null);break}a.Wa++}};function Ic(){this.set={}}h=Ic.prototype;h.add=function(a,b){this.set[a]=null!==b?b:!0};h.contains=function(a){return A(this.set,a)};h.get=function(a){return this.contains(a)?this.set[a]:void 0};h.remove=function(a){delete this.set[a]};h.f=function(){var a;a:{a=this.set;for(var b in a){a=!1;break a}a=!0}return a};h.count=function(){var a=this.set,b=0,c;for(c in a)b++;return b};function R(a,b){Wb(a.set,function(a,d){b(d,a)})}h.keys=function(){var a=[];Wb(this.set,function(b,c){a.push(c)});return a};function Jc(a,b,c){this.yc=a;this.e=Mb(a);this.Ia=this.Ja=0;this.ea=zc(b);this.pc=c;this.ob=!1;this.Pb=function(a){b.host!==b.ga&&(a.ns=b.Zb);var c=[],f;for(f in a)a.hasOwnProperty(f)&&c.push(f+"="+a[f]);return(b.nc?"https://":"http://")+b.ga+"/.lp?"+c.join("&")}}var Kc,Lc;
|
||||
Jc.prototype.open=function(a,b){this.$c=0;this.S=b;this.ld=new Fc(a);this.Na=!1;var c=this;this.Ka=setTimeout(function(){c.e("Timed out trying to connect.");c.Qa();c.Ka=null},Math.floor(3E4));Pb(function(){if(!c.Na){c.la=new Mc(function(a,b,d,k,l){Nc(c,arguments);if(c.la)if(c.Ka&&(clearTimeout(c.Ka),c.Ka=null),c.ob=!0,"start"==a)c.id=b,c.od=d;else if("close"===a)b?(c.la.oc=!1,Gc(c.ld,b,function(){c.Qa()})):c.Qa();else throw Error("Unrecognized command received: "+a);},function(a,b){Nc(c,arguments);
|
||||
Hc(c.ld,a,b)},function(){c.Qa()},c.Pb);var a={start:"t"};a.ser=Math.floor(1E8*Math.random());c.la.rc&&(a.cb=c.la.rc);a.v="5";c.pc&&(a.s=c.pc);"undefined"!==typeof location&&location.href&&-1!==location.href.indexOf("firebaseio.com")&&(a.r="f");a=c.Pb(a);c.e("Connecting via long-poll to "+a);Oc(c.la,a,function(){})}})};
|
||||
Jc.prototype.start=function(){var a=this.la,b=this.od;a.Od=this.id;a.Pd=b;for(a.uc=!0;Pc(a););a=this.id;b=this.od;this.bb=document.createElement("iframe");var c={dframe:"t"};c.id=a;c.pw=b;this.bb.src=this.Pb(c);this.bb.style.display="none";document.body.appendChild(this.bb)};Jc.isAvailable=function(){return!Lc&&!("object"===typeof window&&window.chrome&&window.chrome.extension&&!/^chrome/.test(window.location.href))&&!("object"===typeof Windows&&"object"===typeof Windows.de)&&(Kc||!0)};h=Jc.prototype;
|
||||
h.Xb=function(){};h.Lb=function(){this.Na=!0;this.la&&(this.la.close(),this.la=null);this.bb&&(document.body.removeChild(this.bb),this.bb=null);this.Ka&&(clearTimeout(this.Ka),this.Ka=null)};h.Qa=function(){this.Na||(this.e("Longpoll is closing itself"),this.Lb(),this.S&&(this.S(this.ob),this.S=null))};h.close=function(){this.Na||(this.e("Longpoll is being closed."),this.Lb())};
|
||||
h.send=function(a){a=u(a);this.Ja+=a.length;uc(this.ea,"bytes_sent",a.length);a=sa(a);if(!fa(a))throw Error("encodeByteArray takes an array as a parameter");if(!Fb){Fb={};Gb={};for(var b=0;65>b;b++)Fb[b]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(b),Gb[b]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.".charAt(b)}for(var b=Gb,c=[],d=0;d<a.length;d+=3){var e=a[d],f=d+1<a.length,g=f?a[d+1]:0,k=d+2<a.length,l=k?a[d+2]:0,n=e>>2,e=(e&3)<<4|g>>4,g=(g&15)<<
|
||||
2|l>>6,l=l&63;k||(l=64,f||(g=64));c.push(b[n],b[e],b[g],b[l])}a=Ub(c.join(""),1840);for(b=0;b<a.length;b++)c=this.la,c.Fb.push({Yd:this.$c,be:a.length,bd:a[b]}),c.uc&&Pc(c),this.$c++};function Nc(a,b){var c=u(b).length;a.Ia+=c;uc(a.ea,"bytes_received",c)}
|
||||
function Mc(a,b,c,d){this.Pb=d;this.ia=c;this.Nc=new Ic;this.Fb=[];this.zc=Math.floor(1E8*Math.random());this.oc=!0;this.rc=Hb();window["pLPCommand"+this.rc]=a;window["pRTLPCB"+this.rc]=b;a=document.createElement("iframe");a.style.display="none";if(document.body){document.body.appendChild(a);try{a.contentWindow.document||K("No IE domain setting required")}catch(e){a.src="javascript:void((function(){document.open();document.domain='"+document.domain+"';document.close();})())"}}else throw"Document body has not initialized. Wait to initialize Firebase until after the document is ready.";
|
||||
a.contentDocument?a.Aa=a.contentDocument:a.contentWindow?a.Aa=a.contentWindow.document:a.document&&(a.Aa=a.document);this.Z=a;a="";this.Z.src&&"javascript:"===this.Z.src.substr(0,11)&&(a='<script>document.domain="'+document.domain+'";\x3c/script>');a="<html><body>"+a+"</body></html>";try{this.Z.Aa.open(),this.Z.Aa.write(a),this.Z.Aa.close()}catch(f){K("frame writing exception"),f.stack&&K(f.stack),K(f)}}
|
||||
Mc.prototype.close=function(){this.uc=!1;if(this.Z){this.Z.Aa.body.innerHTML="";var a=this;setTimeout(function(){null!==a.Z&&(document.body.removeChild(a.Z),a.Z=null)},Math.floor(0))}var b=this.ia;b&&(this.ia=null,b())};
|
||||
function Pc(a){if(a.uc&&a.oc&&a.Nc.count()<(0<a.Fb.length?2:1)){a.zc++;var b={};b.id=a.Od;b.pw=a.Pd;b.ser=a.zc;for(var b=a.Pb(b),c="",d=0;0<a.Fb.length;)if(1870>=a.Fb[0].bd.length+30+c.length){var e=a.Fb.shift(),c=c+"&seg"+d+"="+e.Yd+"&ts"+d+"="+e.be+"&d"+d+"="+e.bd;d++}else break;Sc(a,b+c,a.zc);return!0}return!1}function Sc(a,b,c){function d(){a.Nc.remove(c);Pc(a)}a.Nc.add(c);var e=setTimeout(d,Math.floor(25E3));Oc(a,b,function(){clearTimeout(e);d()})}
|
||||
function Oc(a,b,c){setTimeout(function(){try{if(a.oc){var d=a.Z.Aa.createElement("script");d.type="text/javascript";d.async=!0;d.src=b;d.onload=d.onreadystatechange=function(){var a=d.readyState;a&&"loaded"!==a&&"complete"!==a||(d.onload=d.onreadystatechange=null,d.parentNode&&d.parentNode.removeChild(d),c())};d.onerror=function(){K("Long-poll script failed to load: "+b);a.oc=!1;a.close()};a.Z.Aa.body.appendChild(d)}}catch(e){}},Math.floor(1))};function Tc(a){Uc(this,a)}var Vc=[Jc,Q];function Uc(a,b){var c=Q&&Q.isAvailable(),d=c&&!(nb.kd||!0===nb.get("previous_websocket_failure"));b.ce&&(c||L("wss:// URL used, but browser isn't known to support websockets. Trying anyway."),d=!0);if(d)a.Mb=[Q];else{var e=a.Mb=[];Vb(Vc,function(a,b){b&&b.isAvailable()&&e.push(b)})}}function Wc(a){if(0<a.Mb.length)return a.Mb[0];throw Error("No transports available");};function Xc(a,b,c,d,e,f){this.id=a;this.e=Mb("c:"+this.id+":");this.Lc=c;this.Ab=d;this.S=e;this.Kc=f;this.M=b;this.fc=[];this.Zc=0;this.yd=new Tc(b);this.ma=0;this.e("Connection created");Yc(this)}
|
||||
function Yc(a){var b=Wc(a.yd);a.B=new b("c:"+a.id+":"+a.Zc++,a.M);a.Pc=b.responsesRequiredToBeHealthy||0;var c=Zc(a,a.B),d=$c(a,a.B);a.Nb=a.B;a.Kb=a.B;a.w=null;a.Oa=!1;setTimeout(function(){a.B&&a.B.open(c,d)},Math.floor(0));b=b.healthyTimeout||0;0<b&&(a.Vb=setTimeout(function(){a.Vb=null;a.Oa||(a.B&&102400<a.B.Ia?(a.e("Connection exceeded healthy timeout but has received "+a.B.Ia+" bytes. Marking connection healthy."),a.Oa=!0,a.B.Xb()):a.B&&10240<a.B.Ja?a.e("Connection exceeded healthy timeout but has sent "+
|
||||
a.B.Ja+" bytes. Leaving connection alive."):(a.e("Closing unhealthy connection after timeout."),a.close()))},Math.floor(b)))}function $c(a,b){return function(c){b===a.B?(a.B=null,c||0!==a.ma?1===a.ma&&a.e("Realtime connection lost."):(a.e("Realtime connection failed."),"s-"===a.M.ga.substr(0,2)&&(nb.remove("host:"+a.M.host),a.M.ga=a.M.host)),a.close()):b===a.w?(a.e("Secondary connection lost."),c=a.w,a.w=null,a.Nb!==c&&a.Kb!==c||a.close()):a.e("closing an old connection")}}
|
||||
function Zc(a,b){return function(c){if(2!=a.ma)if(b===a.Kb){var d=Tb("t",c);c=Tb("d",c);if("c"==d){if(d=Tb("t",c),"d"in c)if(c=c.d,"h"===d){var d=c.ts,e=c.v,f=c.h;a.pc=c.s;qb(a.M,f);0==a.ma&&(a.B.start(),ad(a,a.B,d),"5"!==e&&L("Protocol version mismatch detected"),c=a.yd,(c=1<c.Mb.length?c.Mb[1]:null)&&bd(a,c))}else if("n"===d){a.e("recvd end transmission on primary");a.Kb=a.w;for(c=0;c<a.fc.length;++c)a.dc(a.fc[c]);a.fc=[];cd(a)}else"s"===d?(a.e("Connection shutdown command received. Shutting down..."),
|
||||
a.Kc&&(a.Kc(c),a.Kc=null),a.S=null,a.close()):"r"===d?(a.e("Reset packet received. New host: "+c),qb(a.M,c),1===a.ma?a.close():(dd(a),Yc(a))):"e"===d?Nb("Server Error: "+c):"o"===d?(a.e("got pong on primary."),ed(a),fd(a)):Nb("Unknown control packet command: "+d)}else"d"==d&&a.dc(c)}else if(b===a.w)if(d=Tb("t",c),c=Tb("d",c),"c"==d)"t"in c&&(c=c.t,"a"===c?gd(a):"r"===c?(a.e("Got a reset on secondary, closing it"),a.w.close(),a.Nb!==a.w&&a.Kb!==a.w||a.close()):"o"===c&&(a.e("got pong on secondary."),
|
||||
a.td--,gd(a)));else if("d"==d)a.fc.push(c);else throw Error("Unknown protocol layer: "+d);else a.e("message on old connection")}}Xc.prototype.ud=function(a){hd(this,{t:"d",d:a})};function cd(a){a.Nb===a.w&&a.Kb===a.w&&(a.e("cleaning up and promoting a connection: "+a.w.yc),a.B=a.w,a.w=null)}
|
||||
function gd(a){0>=a.td?(a.e("Secondary connection is healthy."),a.Oa=!0,a.w.Xb(),a.w.start(),a.e("sending client ack on secondary"),a.w.send({t:"c",d:{t:"a",d:{}}}),a.e("Ending transmission on primary"),a.B.send({t:"c",d:{t:"n",d:{}}}),a.Nb=a.w,cd(a)):(a.e("sending ping on secondary."),a.w.send({t:"c",d:{t:"p",d:{}}}))}Xc.prototype.dc=function(a){ed(this);this.Lc(a)};function ed(a){a.Oa||(a.Pc--,0>=a.Pc&&(a.e("Primary connection is healthy."),a.Oa=!0,a.B.Xb()))}
|
||||
function bd(a,b){a.w=new b("c:"+a.id+":"+a.Zc++,a.M,a.pc);a.td=b.responsesRequiredToBeHealthy||0;a.w.open(Zc(a,a.w),$c(a,a.w));setTimeout(function(){a.w&&(a.e("Timed out trying to upgrade."),a.w.close())},Math.floor(6E4))}function ad(a,b,c){a.e("Realtime connection established.");a.B=b;a.ma=1;a.Ab&&(a.Ab(c),a.Ab=null);0===a.Pc?(a.e("Primary connection is healthy."),a.Oa=!0):setTimeout(function(){fd(a)},Math.floor(5E3))}
|
||||
function fd(a){a.Oa||1!==a.ma||(a.e("sending ping on primary."),hd(a,{t:"c",d:{t:"p",d:{}}}))}function hd(a,b){if(1!==a.ma)throw"Connection is not connected";a.Nb.send(b)}Xc.prototype.close=function(){2!==this.ma&&(this.e("Closing realtime connection."),this.ma=2,dd(this),this.S&&(this.S(),this.S=null))};function dd(a){a.e("Shutting down all connections");a.B&&(a.B.close(),a.B=null);a.w&&(a.w.close(),a.w=null);a.Vb&&(clearTimeout(a.Vb),a.Vb=null)};function id(a,b,c,d,e,f){this.id=jd++;this.e=Mb("p:"+this.id+":");this.Ta=!0;this.ha={};this.T=[];this.Cb=0;this.zb=[];this.R=!1;this.sa=1E3;this.Yb=3E5;this.ec=b||ba;this.cc=c||ba;this.yb=d||ba;this.Mc=e||ba;this.Dc=f||ba;this.M=a;this.Rc=null;this.Jb={};this.Xd=0;this.ub=this.Hc=null;kd(this,0);pc.qb().eb("visible",this.Sd,this);-1===a.host.indexOf("fblocal")&&qc.qb().eb("online",this.Rd,this)}var jd=0,ld=0;h=id.prototype;
|
||||
h.Fa=function(a,b,c){var d=++this.Xd;a={r:d,a:a,b:b};this.e(u(a));v(this.R,"sendRequest_ call when we're not connected not allowed.");this.ka.ud(a);c&&(this.Jb[d]=c)};function md(a,b,c){var d=b.toString(),e=b.path().toString();a.ha[e]=a.ha[e]||{};v(!a.ha[e][d],"listen() called twice for same path/queryId.");a.ha[e][d]={gb:b.gb(),D:c};a.R&&nd(a,e,d,b.gb(),c)}
|
||||
function nd(a,b,c,d,e){a.e("Listen on "+b+" for "+c);var f={p:b};d=tb(d,function(a){return Ka(a)});"{}"!==c&&(f.q=d);f.h=a.Dc(b);a.Fa("l",f,function(d){a.e("listen response",d);d=d.s;"ok"!==d&&od(a,b,c);e&&e(d)})}
|
||||
h.lb=function(a,b,c){this.La={Fd:a,dd:!1,aa:b,Rb:c};this.e("Authenticating using credential: "+this.La);pd(this);if(!(b=40==a.length))a:{var d;try{var e=a.split(".");if(3!==e.length){b=!1;break a}var f;b:{try{if("undefined"!==typeof atob){f=atob(e[1]);break b}}catch(g){K("base64DecodeIfNativeSupport failed: ",g)}f=null}null!==f&&(d=ra(f))}catch(k){K("isAdminAuthToken_ failed",k)}b="object"===typeof d&&!0===wa(d,"admin")}b&&(this.e("Admin auth credential detected. Reducing max reconnect time."),this.Yb=
|
||||
3E4)};h.Ob=function(a){delete this.La;this.yb(!1);this.R&&this.Fa("unauth",{},function(b){a(b.s,b.d)})};function pd(a){var b=a.La;a.R&&b&&a.Fa("auth",{cred:b.Fd},function(c){var d=c.s;c=c.d||"error";"ok"!==d&&a.La===b&&delete a.La;a.yb("ok"===d);b.dd?"ok"!==d&&b.Rb&&b.Rb(d,c):(b.dd=!0,b.aa&&b.aa(d,c))})}function qd(a,b,c,d){b=b.toString();od(a,b,c)&&a.R&&rd(a,b,c,d)}function rd(a,b,c,d){a.e("Unlisten on "+b+" for "+c);b={p:b};d=tb(d,function(a){return Ka(a)});"{}"!==c&&(b.q=d);a.Fa("u",b)}
|
||||
function sd(a,b,c,d){a.R?td(a,"o",b,c,d):a.zb.push({Oc:b,action:"o",data:c,D:d})}function ud(a,b,c,d){a.R?td(a,"om",b,c,d):a.zb.push({Oc:b,action:"om",data:c,D:d})}h.Jc=function(a,b){this.R?td(this,"oc",a,null,b):this.zb.push({Oc:a,action:"oc",data:null,D:b})};function td(a,b,c,d,e){c={p:c,d:d};a.e("onDisconnect "+b,c);a.Fa(b,c,function(a){e&&setTimeout(function(){e(a.s,a.d)},Math.floor(0))})}h.put=function(a,b,c,d){vd(this,"p",a,b,c,d)};function wd(a,b,c,d){vd(a,"m",b,c,d,void 0)}
|
||||
function vd(a,b,c,d,e,f){c={p:c,d:d};m(f)&&(c.h=f);a.T.push({action:b,qd:c,D:e});a.Cb++;b=a.T.length-1;a.R&&xd(a,b)}function xd(a,b){var c=a.T[b].action,d=a.T[b].qd,e=a.T[b].D;a.T[b].Ud=a.R;a.Fa(c,d,function(d){a.e(c+" response",d);delete a.T[b];a.Cb--;0===a.Cb&&(a.T=[]);e&&e(d.s,d.d)})}
|
||||
h.dc=function(a){if("r"in a){this.e("from server: "+u(a));var b=a.r,c=this.Jb[b];c&&(delete this.Jb[b],c(a.b))}else{if("error"in a)throw"A server-side error has occurred: "+a.error;"a"in a&&(b=a.a,c=a.b,this.e("handleServerMessage",b,c),"d"===b?this.ec(c.p,c.d,!1):"m"===b?this.ec(c.p,c.d,!0):"c"===b?yd(this,c.p,c.q):"ac"===b?(a=c.s,b=c.d,c=this.La,delete this.La,c&&c.Rb&&c.Rb(a,b),this.yb(!1)):"sd"===b?this.Rc?this.Rc(c):"msg"in c&&"undefined"!==typeof console&&console.log("FIREBASE: "+c.msg.replace("\n",
|
||||
"\nFIREBASE: ")):Nb("Unrecognized action received from server: "+u(b)+"\nAre you using the latest client?"))}};h.Ab=function(a){this.e("connection ready");this.R=!0;this.ub=(new Date).getTime();this.Mc({serverTimeOffset:a-(new Date).getTime()});pd(this);for(var b in this.ha)for(var c in this.ha[b])a=this.ha[b][c],nd(this,b,c,a.gb,a.D);for(b=0;b<this.T.length;b++)this.T[b]&&xd(this,b);for(;this.zb.length;)b=this.zb.shift(),td(this,b.action,b.Oc,b.data,b.D);this.cc(!0)};
|
||||
function kd(a,b){v(!a.ka,"Scheduling a connect when we're already connected/ing?");a.Ya&&clearTimeout(a.Ya);a.Ya=setTimeout(function(){a.Ya=null;zd(a)},Math.floor(b))}h.Sd=function(a){a&&!this.kb&&this.sa===this.Yb&&(this.e("Window became visible. Reducing delay."),this.sa=1E3,this.ka||kd(this,0));this.kb=a};
|
||||
h.Rd=function(a){a?(this.e("Browser went online. Reconnecting."),this.sa=1E3,this.Ta=!0,this.ka||kd(this,0)):(this.e("Browser went offline. Killing connection; don't reconnect."),this.Ta=!1,this.ka&&this.ka.close())};
|
||||
h.md=function(){this.e("data client disconnected");this.R=!1;this.ka=null;for(var a=0;a<this.T.length;a++){var b=this.T[a];b&&"h"in b.qd&&b.Ud&&(b.D&&b.D("disconnect"),delete this.T[a],this.Cb--)}0===this.Cb&&(this.T=[]);if(this.Ta)this.kb?this.ub&&(3E4<(new Date).getTime()-this.ub&&(this.sa=1E3),this.ub=null):(this.e("Window isn't visible. Delaying reconnect."),this.sa=this.Yb,this.Hc=(new Date).getTime()),a=Math.max(0,this.sa-((new Date).getTime()-this.Hc)),a*=Math.random(),this.e("Trying to reconnect in "+
|
||||
a+"ms"),kd(this,a),this.sa=Math.min(this.Yb,1.3*this.sa);else for(var c in this.Jb)delete this.Jb[c];this.cc(!1)};function zd(a){if(a.Ta){a.e("Making a connection attempt");a.Hc=(new Date).getTime();a.ub=null;var b=q(a.dc,a),c=q(a.Ab,a),d=q(a.md,a),e=a.id+":"+ld++;a.ka=new Xc(e,a.M,b,c,d,function(b){L(b+" ("+a.M.toString()+")");a.Ta=!1})}}h.Ma=function(){this.Ta=!1;this.ka?this.ka.close():(this.Ya&&(clearTimeout(this.Ya),this.Ya=null),this.R&&this.md())};
|
||||
h.ib=function(){this.Ta=!0;this.sa=1E3;this.R||kd(this,0)};function yd(a,b,c){c=c?tb(c,function(a){return La(a)}).join("$"):"{}";(a=od(a,b,c))&&a.D&&a.D("permission_denied")}function od(a,b,c){b=(new F(b)).toString();c||(c="{}");var d=a.ha[b][c];delete a.ha[b][c];return d};function Ad(){this.n=this.F=null}function Bd(a,b,c){if(b.f())a.F=c,a.n=null;else if(null!==a.F)a.F=a.F.ya(b,c);else{null==a.n&&(a.n=new Ic);var d=C(b);a.n.contains(d)||a.n.add(d,new Ad);a=a.n.get(d);b=Ma(b);Bd(a,b,c)}}function Cd(a,b){if(b.f())return a.F=null,a.n=null,!0;if(null!==a.F){if(a.F.O())return!1;var c=a.F;a.F=null;c.A(function(b,c){Bd(a,new F(b),c)});return Cd(a,b)}return null!==a.n?(c=C(b),b=Ma(b),a.n.contains(c)&&Cd(a.n.get(c),b)&&a.n.remove(c),a.n.f()?(a.n=null,!0):!1):!0}
|
||||
function Dd(a,b,c){null!==a.F?c(b,a.F):a.A(function(a,e){var f=new F(b.toString()+"/"+a);Dd(e,f,c)})}Ad.prototype.A=function(a){null!==this.n&&R(this.n,function(b,c){a(b,c)})};function Ed(){this.$=M}function S(a,b){return a.$.K(b)}function T(a,b,c){a.$=a.$.ya(b,c)}Ed.prototype.toString=function(){return this.$.toString()};function Fd(){this.ta=new Ed;this.L=new Ed;this.oa=new Ed;this.Eb=new Qa}function Gd(a,b,c){T(a.ta,b,c);return Hd(a,b)}function Hd(a,b){for(var c=S(a.ta,b),d=S(a.L,b),e=I(a.Eb,b),f=!1,g=e;null!==g;){if(null!==g.j()){f=!0;break}g=g.parent()}if(f)return!1;c=Id(c,d,e);return c!==d?(T(a.L,b,c),!0):!1}function Id(a,b,c){if(c.f())return a;if(null!==c.j())return b;a=a||M;c.A(function(d){d=d.name();var e=a.N(d),f=b.N(d),g=I(c,d),e=Id(e,f,g);a=a.H(d,e)});return a}
|
||||
Fd.prototype.set=function(a,b){var c=this,d=[];sb(b,function(a){var b=a.path;a=a.ra;var g=Hb();J(I(c.Eb,b),g);T(c.L,b,a);d.push({path:b,Zd:g})});return d};function Jd(a,b){sb(b,function(b){var d=b.Zd;b=I(a.Eb,b.path);var e=b.j();v(null!==e,"pendingPut should not be null.");e===d&&J(b,null)})};function Kd(a,b){return a&&"object"===typeof a?(v(".sv"in a,"Unexpected leaf node or priority contents"),b[a[".sv"]]):a}function Ld(a,b){var c=new Ad;Dd(a,new F(""),function(a,e){Bd(c,a,Md(e,b))});return c}function Md(a,b){var c=Kd(a.k(),b),d;if(a.O()){var e=Kd(a.j(),b);return e!==a.j()||c!==a.k()?new bc(e,c):a}d=a;c!==a.k()&&(d=d.Ha(c));a.A(function(a,c){var e=Md(c,b);e!==c&&(d=d.H(a,e))});return d};function Nd(){this.Za=[]}function Od(a,b){if(0!==b.length)for(var c=0;c<b.length;c++)a.Za.push(b[c])}Nd.prototype.Hb=function(){for(var a=0;a<this.Za.length;a++)if(this.Za[a]){var b=this.Za[a];this.Za[a]=null;Pd(b)}this.Za=[]};function Pd(a){var b=a.aa,c=a.vd,d=a.Gb;ac(function(){b(c,d)})};function U(a,b,c,d){this.type=a;this.ua=b;this.ba=c;this.Gb=d};function Qd(a){this.Q=a;this.pa=[];this.Ac=new Nd}function Rd(a,b,c,d,e){a.pa.push({type:b,aa:c,cancel:d,Y:e});d=[];var f=Sd(a.i);a.sb&&f.push(new U("value",a.i));for(var g=0;g<f.length;g++)if(f[g].type===b){var k=new E(a.Q.m,a.Q.path);f[g].ba&&(k=k.G(f[g].ba));d.push({aa:Xb(c,e),vd:new P(f[g].ua,k),Gb:f[g].Gb})}Od(a.Ac,d)}Qd.prototype.ic=function(a,b){b=this.jc(a,b);null!=b&&Td(this,b)};
|
||||
function Td(a,b){for(var c=[],d=0;d<b.length;d++){var e=b[d],f=e.type,g=new E(a.Q.m,a.Q.path);b[d].ba&&(g=g.G(b[d].ba));g=new P(b[d].ua,g);"value"!==e.type||g.rb()?"value"!==e.type&&(f+=" "+g.name()):f+="("+g.V()+")";K(a.Q.m.u.id+": event:"+a.Q.path+":"+a.Q.Ra()+":"+f);for(f=0;f<a.pa.length;f++){var k=a.pa[f];b[d].type===k.type&&c.push({aa:Xb(k.aa,k.Y),vd:g,Gb:e.Gb})}}Od(a.Ac,c)}Qd.prototype.Hb=function(){this.Ac.Hb()};
|
||||
function Sd(a){var b=[];if(!a.O()){var c=null;a.A(function(a,e){b.push(new U("child_added",e,a,c));c=a})}return b}function Ud(a){a.sb||(a.sb=!0,Td(a,[new U("value",a.i)]))};function Vd(a,b){Qd.call(this,a);this.i=b}ka(Vd,Qd);Vd.prototype.jc=function(a,b){this.i=a;this.sb&&null!=b&&b.push(new U("value",this.i));return b};Vd.prototype.pb=function(){return{}};function Wd(a,b){this.Tb=a;this.Ic=b}function Xd(a,b,c,d,e){var f=a.K(c),g=b.K(c);d=new Wd(d,e);e=Yd(d,c,f,g);g=!f.f()&&!g.f()&&f.k()!==g.k();if(e||g)for(f=c,c=e;null!==f.parent();){var k=a.K(f);e=b.K(f);var l=f.parent();if(!d.Tb||I(d.Tb,l).j()){var n=b.K(l),r=[],f=Na(f);k.f()?(k=n.fa(f,e),r.push(new U("child_added",e,f,k))):e.f()?r.push(new U("child_removed",k,f)):(k=n.fa(f,e),g&&r.push(new U("child_moved",e,f,k)),c&&r.push(new U("child_changed",e,f,k)));d.Ic(l,n,r)}g&&(g=!1,c=!0);f=l}}
|
||||
function Yd(a,b,c,d){var e,f=[];c===d?e=!1:c.O()&&d.O()?e=c.j()!==d.j():c.O()?(Zd(a,b,M,d,f),e=!0):d.O()?(Zd(a,b,c,M,f),e=!0):e=Zd(a,b,c,d,f);e?a.Ic(b,d,f):c.k()!==d.k()&&a.Ic(b,d,null);return e}
|
||||
function Zd(a,b,c,d,e){var f=!1,g=!a.Tb||!I(a.Tb,b).f(),k=[],l=[],n=[],r=[],t={},s={},w,V,G,H;w=c.$a();G=Za(w);V=d.$a();for(H=Za(V);null!==G||null!==H;){c=H;c=null===G?1:null===c?-1:G.key===c.key?0:dc({name:G.key,ja:G.value.k()},{name:c.key,ja:c.value.k()});if(0>c)f=wa(t,G.key),m(f)?(n.push({Cc:G,Wc:k[f]}),k[f]=null):(s[G.key]=l.length,l.push(G)),f=!0,G=Za(w);else{if(0<c)f=wa(s,H.key),m(f)?(n.push({Cc:l[f],Wc:H}),l[f]=null):(t[H.key]=k.length,k.push(H)),f=!0;else{c=b.G(H.key);if(c=Yd(a,c,G.value,
|
||||
H.value))r.push(H),f=!0;G.value.k()!==H.value.k()&&(n.push({Cc:G,Wc:H}),f=!0);G=Za(w)}H=Za(V)}if(!g&&f)return!0}for(g=0;g<l.length;g++)if(t=l[g])c=b.G(t.key),Yd(a,c,t.value,M),e.push(new U("child_removed",t.value,t.key));for(g=0;g<k.length;g++)if(t=k[g])c=b.G(t.key),l=d.fa(t.key,t.value),Yd(a,c,M,t.value),e.push(new U("child_added",t.value,t.key,l));for(g=0;g<n.length;g++)t=n[g].Cc,k=n[g].Wc,c=b.G(k.key),l=d.fa(k.key,k.value),e.push(new U("child_moved",k.value,k.key,l)),(c=Yd(a,c,t.value,k.value))&&
|
||||
r.push(k);for(g=0;g<r.length;g++)a=r[g],l=d.fa(a.key,a.value),e.push(new U("child_changed",a.value,a.key,l));return f};function $d(){this.X=this.xa=null;this.set={}}ka($d,Ic);h=$d.prototype;h.setActive=function(a){this.xa=a};function ae(a,b,c){a.add(b,c);a.X||(a.X=c.Q.path)}function be(a){var b=a.xa;a.xa=null;return b}function ce(a){return a.contains("default")}function de(a){return null!=a.xa&&ce(a)}h.defaultView=function(){return ce(this)?this.get("default"):null};h.path=function(){return this.X};h.toString=function(){return tb(this.keys(),function(a){return"default"===a?"{}":a}).join("$")};
|
||||
h.gb=function(){var a=[];R(this,function(b,c){a.push(c.Q)});return a};function ee(a,b){Qd.call(this,a);this.i=M;this.jc(b,Sd(b))}ka(ee,Qd);
|
||||
ee.prototype.jc=function(a,b){if(null===b)return b;var c=[],d=this.Q;m(d.da)&&(m(d.wa)&&null!=d.wa?c.push(function(a,b){var c=Qb(b,d.da);return 0<c||0===c&&0<=Rb(a,d.wa)}):c.push(function(a,b){return 0<=Qb(b,d.da)}));m(d.Ba)&&(m(d.Xa)?c.push(function(a,b){var c=Qb(b,d.Ba);return 0>c||0===c&&0>=Rb(a,d.Xa)}):c.push(function(a,b){return 0>=Qb(b,d.Ba)}));var e=null,f=null;if(m(this.Q.Da))if(m(this.Q.da)){if(e=fe(a,c,this.Q.Da,!1)){var g=a.N(e).k();c.push(function(a,b){var c=Qb(b,g);return 0>c||0===c&&
|
||||
0>=Rb(a,e)})}}else if(f=fe(a,c,this.Q.Da,!0)){var k=a.N(f).k();c.push(function(a,b){var c=Qb(b,k);return 0<c||0===c&&0<=Rb(a,f)})}for(var l=[],n=[],r=[],t=[],s=0;s<b.length;s++){var w=b[s].ba,V=b[s].ua;switch(b[s].type){case "child_added":ge(c,w,V)&&(this.i=this.i.H(w,V),n.push(b[s]));break;case "child_removed":this.i.N(w).f()||(this.i=this.i.H(w,null),l.push(b[s]));break;case "child_changed":!this.i.N(w).f()&&ge(c,w,V)&&(this.i=this.i.H(w,V),t.push(b[s]));break;case "child_moved":var G=!this.i.N(w).f(),
|
||||
H=ge(c,w,V);G?H?(this.i=this.i.H(w,V),r.push(b[s])):(l.push(new U("child_removed",this.i.N(w),w)),this.i=this.i.H(w,null)):H&&(this.i=this.i.H(w,V),n.push(b[s]))}}var Qc=e||f;if(Qc){var Rc=(s=null!==f)?this.i.ed():this.i.gd(),hc=!1,ab=!1,bb=this;(s?a.Bc:a.A).call(a,function(a,b){ab||null!==Rc||(ab=!0);if(ab&&hc)return!0;hc?(l.push(new U("child_removed",bb.i.N(a),a)),bb.i=bb.i.H(a,null)):ab&&(n.push(new U("child_added",b,a)),bb.i=bb.i.H(a,b));Rc===a&&(ab=!0);a===Qc&&(hc=!0)})}for(s=0;s<n.length;s++)c=
|
||||
n[s],w=this.i.fa(c.ba,c.ua),l.push(new U("child_added",c.ua,c.ba,w));for(s=0;s<r.length;s++)c=r[s],w=this.i.fa(c.ba,c.ua),l.push(new U("child_moved",c.ua,c.ba,w));for(s=0;s<t.length;s++)c=t[s],w=this.i.fa(c.ba,c.ua),l.push(new U("child_changed",c.ua,c.ba,w));this.sb&&0<l.length&&l.push(new U("value",this.i));return l};function fe(a,b,c,d){if(a.O())return null;var e=null;(d?a.Bc:a.A).call(a,function(a,d){if(ge(b,a,d)&&(e=a,c--,0===c))return!0});return e}
|
||||
function ge(a,b,c){for(var d=0;d<a.length;d++)if(!a[d](b,c.k()))return!1;return!0}ee.prototype.Ec=function(a){return this.i.N(a)!==M};
|
||||
ee.prototype.pb=function(a,b,c){var d={};this.i.O()||this.i.A(function(a){d[a]=3});var e=this.i;c=S(c,new F(""));var f=new Qa;J(I(f,this.Q.path),!0);b=M.ya(a,b);var g=this;Xd(c,b,a,f,function(a,b,c){null!==c&&a.toString()===g.Q.path.toString()&&g.jc(b,c)});this.i.O()?Wb(d,function(a,b){d[b]=2}):(this.i.A(function(a){A(d,a)||(d[a]=1)}),Wb(d,function(a,b){g.i.N(b).f()&&(d[b]=2)}));this.i=e;return d};function he(a,b){this.u=a;this.g=b;this.bc=b.$;this.na=new Qa}he.prototype.Qb=function(a,b,c,d,e){var f=a.path,g=I(this.na,f),k=g.j();null===k?(k=new $d,J(g,k)):v(!k.f(),"We shouldn't be storing empty QueryMaps");var l=a.Ra();if(k.contains(l))a=k.get(l),Rd(a,b,c,d,e);else{var n=this.g.$.K(f);a=ie(a,n);je(this,g,k,l,a);Rd(a,b,c,d,e);(b=(b=Ta(I(this.na,f),function(a){var b;if(b=a.j()&&a.j().defaultView())b=a.j().defaultView().sb;if(b)return!0},!0))||null===this.u&&!S(this.g,f).f())&&Ud(a)}a.Hb()};
|
||||
function ke(a,b,c,d,e){var f=a.get(b),g;if(g=f){g=!1;for(var k=f.pa.length-1;0<=k;k--){var l=f.pa[k];if(!(c&&l.type!==c||d&&l.aa!==d||e&&l.Y!==e)&&(f.pa.splice(k,1),g=!0,c&&d))break}}(c=g&&!(0<f.pa.length))&&a.remove(b);return c}function le(a,b,c,d,e){b=b?b.Ra():null;var f=[];b&&"default"!==b?ke(a,b,c,d,e)&&f.push(b):sb(a.keys(),function(b){ke(a,b,c,d,e)&&f.push(b)});return f}he.prototype.lc=function(a,b,c,d){var e=I(this.na,a.path).j();return null===e?null:me(this,e,a,b,c,d)};
|
||||
function me(a,b,c,d,e,f){var g=b.path(),g=I(a.na,g);c=le(b,c,d,e,f);b.f()&&J(g,null);d=ne(g);if(0<c.length&&!d){d=g;e=g.parent();for(c=!1;!c&&e;){if(f=e.j()){v(!de(f));var k=d.name(),l=!1;R(f,function(a,b){l=b.Ec(k)||l});l&&(c=!0)}d=e;e=e.parent()}d=null;de(b)||(b=be(b),d=oe(a,g),b&&b());return c?null:d}return null}function pe(a,b,c){Sa(I(a.na,b),function(a){(a=a.j())&&R(a,function(a,b){Ud(b)})},c,!0)}
|
||||
function W(a,b,c){function d(a){do{if(g[a.toString()])return!0;a=a.parent()}while(null!==a);return!1}var e=a.bc,f=a.g.$;a.bc=f;for(var g={},k=0;k<c.length;k++)g[c[k].toString()]=!0;Xd(e,f,b,a.na,function(c,e,f){if(b.contains(c)){var g=d(c);g&&pe(a,c,!1);a.ic(c,e,f);g&&pe(a,c,!0)}else a.ic(c,e,f)});d(b)&&pe(a,b,!0);qe(a,b)}function qe(a,b){var c=I(a.na,b);Sa(c,function(a){(a=a.j())&&R(a,function(a,b){b.Hb()})},!0,!0);Ta(c,function(a){(a=a.j())&&R(a,function(a,b){b.Hb()})},!1)}
|
||||
he.prototype.ic=function(a,b,c){a=I(this.na,a).j();null!==a&&R(a,function(a,e){e.ic(b,c)})};function ne(a){return Ta(a,function(a){return a.j()&&de(a.j())})}function je(a,b,c,d,e){if(de(c)||ne(b))ae(c,d,e);else{var f,g;c.f()||(f=c.toString(),g=c.gb());ae(c,d,e);c.setActive(re(a,c));f&&g&&qd(a.u,c.path(),f,g)}de(c)&&Sa(b,function(a){if(a=a.j())a.xa&&a.xa(),a.xa=null})}
|
||||
function oe(a,b){function c(b){var f=b.j();if(f&&ce(f))d.push(f.path()),null==f.xa&&f.setActive(re(a,f));else{if(f){null!=f.xa||f.setActive(re(a,f));var g={};R(f,function(a,b){b.i.A(function(a){A(g,a)||(g[a]=!0,a=f.path().G(a),d.push(a))})})}b.A(c)}}var d=[];c(b);return d}
|
||||
function re(a,b){if(a.u){var c=a.u,d=b.path(),e=b.toString(),f=b.gb(),g,k=b.keys(),l=ce(b);md(a.u,b,function(c){"ok"!==c?(c=Zb(c),L("on() or once() for "+b.path().toString()+" failed: "+c.toString()),se(a,b,c)):g||(l?pe(a,b.path(),!0):sb(k,function(a){(a=b.get(a))&&Ud(a)}),qe(a,b.path()))});return function(){g=!0;qd(c,d,e,f)}}return ba}function se(a,b,c){b&&(R(b,function(a,b){for(var f=0;f<b.pa.length;f++){var g=b.pa[f];g.cancel&&Xb(g.cancel,g.Y)(c)}}),me(a,b))}
|
||||
function ie(a,b){return"default"===a.Ra()?new Vd(a,b):new ee(a,b)}he.prototype.pb=function(a,b,c,d){function e(a){Wb(a,function(a,b){f[b]=3===a?3:(wa(f,b)||a)===a?a:3})}var f={};R(b,function(b,f){e(f.pb(a,c,d))});c.O()||c.A(function(a){A(f,a)||(f[a]=4)});return f};function te(a,b,c,d,e){var f=b.path();b=a.pb(f,b,d,e);var g=M,k=[];Wb(b,function(b,n){var r=new F(n);3===b||1===b?g=g.H(n,d.K(r)):(2===b&&k.push({path:f.G(n),ra:M}),k=k.concat(ue(a,d.K(r),I(c,r),e)))});return[{path:f,ra:g}].concat(k)}
|
||||
function ve(a,b,c,d){var e;a:{var f=I(a.na,b);e=f.parent();for(var g=[];null!==e;){var k=e.j();if(null!==k){if(ce(k)){e=[{path:b,ra:c}];break a}k=a.pb(b,k,c,d);f=wa(k,f.name());if(3===f||1===f){e=[{path:b,ra:c}];break a}2===f&&g.push({path:b,ra:M})}f=e;e=e.parent()}e=g}if(1==e.length&&(!e[0].ra.f()||c.f()))return e;g=I(a.na,b);f=g.j();null!==f?ce(f)?e.push({path:b,ra:c}):e=e.concat(te(a,f,g,c,d)):e=e.concat(ue(a,c,g,d));return e}
|
||||
function ue(a,b,c,d){var e=c.j();if(null!==e)return ce(e)?[{path:c.path(),ra:b}]:te(a,e,c,b,d);var f=[];c.A(function(c){var e=b.O()?M:b.N(c.name());c=ue(a,e,c,d);f=f.concat(c)});return f};function we(a){this.M=a;this.ea=zc(a);this.u=new id(this.M,q(this.ec,this),q(this.cc,this),q(this.yb,this),q(this.Mc,this),q(this.Dc,this));this.xd=Ac(a,q(function(){return new wc(this.ea,this.u)},this));this.Ua=new Qa;this.Ga=new Ed;this.g=new Fd;this.I=new he(this.u,this.g.oa);this.Fc=new Ed;this.Gc=new he(null,this.Fc);xe(this,"connected",!1);xe(this,"authenticated",!1);this.S=new Ad;this.Sb=0}h=we.prototype;h.toString=function(){return(this.M.nc?"https://":"http://")+this.M.host};h.name=function(){return this.M.Zb};
|
||||
function ye(a){a=S(a.Fc,new F(".info/serverTimeOffset")).V()||0;return(new Date).getTime()+a}function ze(a){a=a={timestamp:ye(a)};a.timestamp=a.timestamp||(new Date).getTime();return a}
|
||||
h.ec=function(a,b,c){this.Sb++;this.jd&&(b=this.jd(a,b));var d,e,f=[];9<=a.length&&a.lastIndexOf(".priority")===a.length-9?(d=new F(a.substring(0,a.length-9)),e=S(this.g.ta,d).Ha(b),f.push(d)):c?(d=new F(a),e=S(this.g.ta,d),Wb(b,function(a,b){var c=new F(b);".priority"===b?e=e.Ha(a):(e=e.ya(c,O(a)),f.push(d.G(b)))})):(d=new F(a),e=O(b),f.push(d));a=ve(this.I,d,e,this.g.L);b=!1;for(c=0;c<a.length;++c){var g=a[c];b=Gd(this.g,g.path,g.ra)||b}b&&(d=Ae(this,d));W(this.I,d,f)};
|
||||
h.cc=function(a){xe(this,"connected",a);!1===a&&Be(this)};h.Mc=function(a){var b=this;Vb(a,function(a,d){xe(b,d,a)})};h.Dc=function(a){a=new F(a);return S(this.g.ta,a).hash()};h.yb=function(a){xe(this,"authenticated",a)};function xe(a,b,c){b=new F("/.info/"+b);T(a.Fc,b,O(c));W(a.Gc,b,[b])}
|
||||
h.lb=function(a,b,c){"firebaseio-demo.com"===this.M.domain&&L("FirebaseRef.auth() not supported on demo (*.firebaseio-demo.com) Firebases. Please use on production (*.firebaseio.com) Firebases only.");this.u.lb(a,function(a,c){X(b,a,c)},function(a,b){L("auth() was canceled: "+b);if(c){var f=Error(b);f.code=a.toUpperCase();c(f)}})};h.Ob=function(a){this.u.Ob(function(b,c){X(a,b,c)})};
|
||||
h.jb=function(a,b,c,d){this.e("set",{path:a.toString(),value:b,ja:c});var e=ze(this);b=O(b,c);var e=Md(b,e),e=ve(this.I,a,e,this.g.L),f=this.g.set(a,e),g=this;this.u.put(a.toString(),b.V(!0),function(b,c){"ok"!==b&&L("set at "+a+" failed: "+b);Jd(g.g,f);Hd(g.g,a);var e=Ae(g,a);W(g.I,e,[]);X(d,b,c)});e=Ce(this,a);Ae(this,e);W(this.I,e,[a])};
|
||||
h.update=function(a,b,c){this.e("update",{path:a.toString(),value:b});var d=S(this.g.oa,a),e=!0,f=[],g=ze(this),k=[],l;for(l in b){var e=!1,n=O(b[l]),n=Md(n,g),d=d.H(l,n),r=a.G(l);f.push(r);n=ve(this.I,r,n,this.g.L);k=k.concat(this.g.set(a,n))}if(e)K("update() called with empty data. Don't do anything."),X(c,"ok");else{var t=this;wd(this.u,a.toString(),b,function(b,d){"ok"!==b&&L("update at "+a+" failed: "+b);Jd(t.g,k);Hd(t.g,a);var e=Ae(t,a);W(t.I,e,[]);X(c,b,d)});b=Ce(this,a);Ae(this,b);W(t.I,
|
||||
b,f)}};h.Sc=function(a,b,c){this.e("setPriority",{path:a.toString(),ja:b});var d=ze(this),d=Kd(b,d),d=S(this.g.L,a).Ha(d),d=ve(this.I,a,d,this.g.L),e=this.g.set(a,d),f=this;this.u.put(a.toString()+"/.priority",b,function(b,d){"permission_denied"===b&&L("setPriority at "+a+" failed: "+b);Jd(f.g,e);Hd(f.g,a);var l=Ae(f,a);W(f.I,l,[]);X(c,b,d)});b=Ae(this,a);W(f.I,b,[])};
|
||||
function Be(a){a.e("onDisconnectEvents");var b=[],c=ze(a);Dd(Ld(a.S,c),new F(""),function(c,e){var f=ve(a.I,c,e,a.g.L);b.push.apply(b,a.g.set(c,f));f=Ce(a,c);Ae(a,f);W(a.I,f,[c])});Jd(a.g,b);a.S=new Ad}h.Jc=function(a,b){var c=this;this.u.Jc(a.toString(),function(d,e){"ok"===d&&Cd(c.S,a);X(b,d,e)})};function De(a,b,c,d){var e=O(c);sd(a.u,b.toString(),e.V(!0),function(c,g){"ok"===c&&Bd(a.S,b,e);X(d,c,g)})}
|
||||
function Ee(a,b,c,d,e){var f=O(c,d);sd(a.u,b.toString(),f.V(!0),function(c,d){"ok"===c&&Bd(a.S,b,f);X(e,c,d)})}function Fe(a,b,c,d){var e=!0,f;for(f in c)e=!1;e?(K("onDisconnect().update() called with empty data. Don't do anything."),X(d,"ok")):ud(a.u,b.toString(),c,function(e,f){if("ok"===e)for(var l in c){var n=O(c[l]);Bd(a.S,b.G(l),n)}X(d,e,f)})}function Ge(a){uc(a.ea,"deprecated_on_disconnect");a.xd.Vc.deprecated_on_disconnect=!0}
|
||||
h.Qb=function(a,b,c,d,e){".info"===C(a.path)?this.Gc.Qb(a,b,c,d,e):this.I.Qb(a,b,c,d,e)};h.lc=function(a,b,c,d){if(".info"===C(a.path))this.Gc.lc(a,b,c,d);else{b=this.I.lc(a,b,c,d);if(c=null!==b){c=this.g;d=a.path;for(var e=[],f=0;f<b.length;++f)e[f]=S(c.ta,b[f]);T(c.ta,d,M);for(f=0;f<b.length;++f)T(c.ta,b[f],e[f]);c=Hd(c,d)}c&&(v(this.g.oa.$===this.I.bc,"We should have raised any outstanding events by now. Else, we'll blow them away."),T(this.g.oa,a.path,S(this.g.L,a.path)),this.I.bc=this.g.oa.$)}};
|
||||
h.Ma=function(){this.u.Ma()};h.ib=function(){this.u.ib()};h.Tc=function(a){if("undefined"!==typeof console){a?(this.qc||(this.qc=new vc(this.ea)),a=this.qc.get()):a=this.ea.get();var b=ub(rc(a),function(a,b){return Math.max(b.length,a)},0),c;for(c in a){for(var d=a[c],e=c.length;e<b+2;e++)c+=" ";console.log(c+d)}}};h.Uc=function(a){uc(this.ea,a);this.xd.Vc[a]=!0};h.e=function(){K("r:"+this.u.id+":",arguments)};
|
||||
function X(a,b,c){a&&ac(function(){if("ok"==b)a(null,c);else{var d=(b||"error").toUpperCase(),e=d;c&&(e+=": "+c);e=Error(e);e.code=d;a(e)}})};function He(a,b,c,d,e){function f(){}a.e("transaction on "+b);var g=new E(a,b);g.eb("value",f);c={path:b,update:c,D:d,status:null,nd:Hb(),vc:e,sd:0,sc:function(){g.xb("value",f)},tc:null};a.Ga.$=Ie(a,a.Ga.$,a.g.L.$,a.Ua);d=c.update(S(a.Ga,b).V());if(m(d)){Ba("transaction failed: Data returned ",d);c.status=1;e=I(a.Ua,b);var k=e.j()||[];k.push(c);J(e,k);k="object"===typeof d&&null!==d&&A(d,".priority")?d[".priority"]:S(a.g.L,b).k();e=ze(a);d=O(d,k);d=Md(d,e);T(a.Ga,b,d);c.vc&&(T(a.g.oa,b,d),W(a.I,
|
||||
b,[b]));Je(a)}else c.sc(),c.D&&(a=Ke(a,b),c.D(null,!1,a))}function Je(a,b){var c=b||a.Ua;b||Le(a,c);if(null!==c.j()){var d=Me(a,c);v(0<d.length);vb(d,function(a){return 1===a.status})&&Ne(a,c.path(),d)}else c.rb()&&c.A(function(b){Je(a,b)})}
|
||||
function Ne(a,b,c){for(var d=0;d<c.length;d++)v(1===c[d].status,"tryToSendTransactionQueue_: items in queue should all be run."),c[d].status=2,c[d].sd++;var e=S(a.g.L,b).hash();T(a.g.L,b,S(a.g.oa,b));for(var f=S(a.Ga,b).V(!0),g=Hb(),k=Oe(c),d=0;d<k.length;d++)J(I(a.g.Eb,k[d]),g);a.u.put(b.toString(),f,function(e){a.e("transaction put response",{path:b.toString(),status:e});for(d=0;d<k.length;d++){var f=I(a.g.Eb,k[d]),r=f.j();v(null!==r,"sendTransactionQueue_: pendingPut should not be null.");r===
|
||||
g&&(J(f,null),T(a.g.L,k[d],S(a.g.ta,k[d])))}if("ok"===e){e=[];for(d=0;d<c.length;d++)c[d].status=3,c[d].D&&(f=Ke(a,c[d].path),e.push(q(c[d].D,null,null,!0,f))),c[d].sc();Le(a,I(a.Ua,b));Je(a);for(d=0;d<e.length;d++)ac(e[d])}else{if("datastale"===e)for(d=0;d<c.length;d++)c[d].status=4===c[d].status?5:1;else for(L("transaction at "+b+" failed: "+e),d=0;d<c.length;d++)c[d].status=5,c[d].tc=e;e=Ae(a,b);W(a.I,e,[b])}},e)}
|
||||
function Oe(a){for(var b={},c=0;c<a.length;c++)a[c].vc&&(b[a[c].path.toString()]=a[c].path);a=[];for(var d in b)a.push(b[d]);return a}
|
||||
function Ae(a,b){var c=Pe(a,b),d=c.path(),c=Me(a,c);T(a.g.oa,d,S(a.g.L,d));T(a.Ga,d,S(a.g.L,d));if(0!==c.length){for(var e=S(a.g.oa,d),f=e,g=[],k=0;k<c.length;k++){var l=Oa(d,c[k].path),n=!1,r;v(null!==l,"rerunTransactionsUnderNode_: relativePath should not be null.");if(5===c[k].status)n=!0,r=c[k].tc;else if(1===c[k].status)if(25<=c[k].sd)n=!0,r="maxretry";else{var t=e.K(l),s=c[k].update(t.V());if(m(s)){Ba("transaction failed: Data returned ",s);var w=O(s);"object"===typeof s&&null!=s&&A(s,".priority")||
|
||||
(w=w.Ha(t.k()));e=e.ya(l,w);c[k].vc&&(f=f.ya(l,w))}else n=!0,r="nodata"}n&&(c[k].status=3,setTimeout(c[k].sc,Math.floor(0)),c[k].D&&(n=new E(a,c[k].path),l=new P(e.K(l),n),"nodata"===r?g.push(q(c[k].D,null,null,!1,l)):g.push(q(c[k].D,null,Error(r),!1,l))))}T(a.Ga,d,e);T(a.g.oa,d,f);Le(a,a.Ua);for(k=0;k<g.length;k++)ac(g[k]);Je(a)}return d}function Pe(a,b){for(var c,d=a.Ua;null!==(c=C(b))&&null===d.j();)d=I(d,c),b=Ma(b);return d}
|
||||
function Me(a,b){var c=[];Qe(a,b,c);c.sort(function(a,b){return a.nd-b.nd});return c}function Qe(a,b,c){var d=b.j();if(null!==d)for(var e=0;e<d.length;e++)c.push(d[e]);b.A(function(b){Qe(a,b,c)})}function Le(a,b){var c=b.j();if(c){for(var d=0,e=0;e<c.length;e++)3!==c[e].status&&(c[d]=c[e],d++);c.length=d;J(b,0<c.length?c:null)}b.A(function(b){Le(a,b)})}function Ce(a,b){var c=Pe(a,b).path(),d=I(a.Ua,b);Ta(d,function(a){Re(a)});Re(d);Sa(d,function(a){Re(a)});return c}
|
||||
function Re(a){var b=a.j();if(null!==b){for(var c=[],d=-1,e=0;e<b.length;e++)4!==b[e].status&&(2===b[e].status?(v(d===e-1,"All SENT items should be at beginning of queue."),d=e,b[e].status=4,b[e].tc="set"):(v(1===b[e].status),b[e].sc(),b[e].D&&c.push(q(b[e].D,null,Error("set"),!1,null))));-1===d?J(a,null):b.length=d+1;for(e=0;e<c.length;e++)ac(c[e])}}function Ke(a,b){var c=new E(a,b);return new P(S(a.Ga,b),c)}
|
||||
function Ie(a,b,c,d){if(d.f())return c;if(null!=d.j())return b;var e=c;d.A(function(d){var g=d.name(),k=new F(g);d=Ie(a,b.K(k),c.K(k),d);e=e.H(g,d)});return e};function Y(){this.hb={}}ca(Y);Y.prototype.Ma=function(){for(var a in this.hb)this.hb[a].Ma()};Y.prototype.interrupt=Y.prototype.Ma;Y.prototype.ib=function(){for(var a in this.hb)this.hb[a].ib()};Y.prototype.resume=Y.prototype.ib;var Z={Kd:function(a){var b=N.prototype.hash;N.prototype.hash=a;var c=bc.prototype.hash;bc.prototype.hash=a;return function(){N.prototype.hash=b;bc.prototype.hash=c}}};Z.hijackHash=Z.Kd;Z.Ra=function(a){return a.Ra()};Z.queryIdentifier=Z.Ra;Z.Nd=function(a){return a.m.u.ha};Z.listens=Z.Nd;Z.Vd=function(a){return a.m.u.ka};Z.refConnection=Z.Vd;Z.Ad=id;Z.DataConnection=Z.Ad;id.prototype.sendRequest=id.prototype.Fa;id.prototype.interrupt=id.prototype.Ma;Z.Bd=Xc;Z.RealTimeConnection=Z.Bd;
|
||||
Xc.prototype.sendRequest=Xc.prototype.ud;Xc.prototype.close=Xc.prototype.close;Z.zd=pb;Z.ConnectionTarget=Z.zd;Z.Id=function(){Kc=Cc=!0};Z.forceLongPolling=Z.Id;Z.Jd=function(){Lc=!0};Z.forceWebSockets=Z.Jd;Z.ae=function(a,b){a.m.u.Rc=b};Z.setSecurityDebugCallback=Z.ae;Z.Tc=function(a,b){a.m.Tc(b)};Z.stats=Z.Tc;Z.Uc=function(a,b){a.m.Uc(b)};Z.statsIncrementCounter=Z.Uc;Z.Sb=function(a){return a.m.Sb};Z.dataUpdateCount=Z.Sb;Z.Ld=function(a,b){a.m.jd=b};Z.interceptServerData=Z.Ld;function $(a,b,c){this.Ib=a;this.X=b;this.Ea=c}$.prototype.cancel=function(a){x("Firebase.onDisconnect().cancel",0,1,arguments.length);z("Firebase.onDisconnect().cancel",1,a,!0);this.Ib.Jc(this.X,a)};$.prototype.cancel=$.prototype.cancel;$.prototype.remove=function(a){x("Firebase.onDisconnect().remove",0,1,arguments.length);B("Firebase.onDisconnect().remove",this.X);z("Firebase.onDisconnect().remove",1,a,!0);De(this.Ib,this.X,null,a)};$.prototype.remove=$.prototype.remove;
|
||||
$.prototype.set=function(a,b){x("Firebase.onDisconnect().set",1,2,arguments.length);B("Firebase.onDisconnect().set",this.X);Aa("Firebase.onDisconnect().set",a,!1);z("Firebase.onDisconnect().set",2,b,!0);De(this.Ib,this.X,a,b)};$.prototype.set=$.prototype.set;
|
||||
$.prototype.jb=function(a,b,c){x("Firebase.onDisconnect().setWithPriority",2,3,arguments.length);B("Firebase.onDisconnect().setWithPriority",this.X);Aa("Firebase.onDisconnect().setWithPriority",a,!1);Fa("Firebase.onDisconnect().setWithPriority",2,b,!1);z("Firebase.onDisconnect().setWithPriority",3,c,!0);if(".length"===this.Ea||".keys"===this.Ea)throw"Firebase.onDisconnect().setWithPriority failed: "+this.Ea+" is a read-only object.";Ee(this.Ib,this.X,a,b,c)};$.prototype.setWithPriority=$.prototype.jb;
|
||||
$.prototype.update=function(a,b){x("Firebase.onDisconnect().update",1,2,arguments.length);B("Firebase.onDisconnect().update",this.X);if(ea(a)){for(var c={},d=0;d<a.length;++d)c[""+d]=a[d];a=c;L("Passing an Array to Firebase.onDisconnect().update() is deprecated. Use set() if you want to overwrite the existing data, or an Object with integer keys if you really do want to only update some of the children.")}Ea("Firebase.onDisconnect().update",a);z("Firebase.onDisconnect().update",2,b,!0);Fe(this.Ib,
|
||||
this.X,a,b)};$.prototype.update=$.prototype.update;var Se=function(){var a=0,b=[];return function(c){var d=c===a;a=c;for(var e=Array(8),f=7;0<=f;f--)e[f]="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(c%64),c=Math.floor(c/64);v(0===c,"Cannot push at time == 0");c=e.join("");if(d){for(f=11;0<=f&&63===b[f];f--)b[f]=0;b[f]++}else for(f=0;12>f;f++)b[f]=Math.floor(64*Math.random());for(f=0;12>f;f++)c+="-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".charAt(b[f]);v(20===c.length,"NextPushId: Length should be 20.");
|
||||
return c}}();function E(a,b){var c,d;if(a instanceof we)c=a,d=b;else{x("new Firebase",1,2,arguments.length);var e=arguments[0];d=c="";var f=!0,g="";if(p(e)){var k=e.indexOf("//");if(0<=k)var l=e.substring(0,k-1),e=e.substring(k+2);k=e.indexOf("/");-1===k&&(k=e.length);c=e.substring(0,k);var e=e.substring(k+1),n=c.split(".");if(3==n.length){k=n[2].indexOf(":");f=0<=k?"https"===l||"wss"===l:!0;if("firebase"===n[1])Ob(c+" is no longer supported. Please use <YOUR FIREBASE>.firebaseio.com instead");else for(d=n[0],
|
||||
g="",e=("/"+e).split("/"),k=0;k<e.length;k++)if(0<e[k].length){n=e[k];try{n=decodeURIComponent(n.replace(/\+/g," "))}catch(r){}g+="/"+n}d=d.toLowerCase()}else Ob("Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com")}f||"undefined"!==typeof window&&window.location&&window.location.protocol&&-1!==window.location.protocol.indexOf("https:")&&L("Insecure Firebase access from a secure page. Please use https in calls to new Firebase().");c=new pb(c,f,d,"ws"===l||"wss"===l);d=new F(g);
|
||||
f=d.toString();!(l=!p(c.host)||0===c.host.length||!za(c.Zb))&&(l=0!==f.length)&&(f&&(f=f.replace(/^\/*\.info(\/|$)/,"/")),l=!(p(f)&&0!==f.length&&!ya.test(f)));if(l)throw Error(y("new Firebase",1,!1)+'must be a valid firebase URL and the path can\'t contain ".", "#", "$", "[", or "]".');if(b)if(b instanceof Y)f=b;else throw Error("Expected a valid Firebase.Context for second argument to new Firebase()");else f=Y.qb();l=c.toString();e=wa(f.hb,l);e||(e=new we(c),f.hb[l]=e);c=e}D.call(this,c,d)}
|
||||
ka(E,D);var Te=E,Ue=["Firebase"],Ve=aa;Ue[0]in Ve||!Ve.execScript||Ve.execScript("var "+Ue[0]);for(var We;Ue.length&&(We=Ue.shift());)!Ue.length&&m(Te)?Ve[We]=Te:Ve=Ve[We]?Ve[We]:Ve[We]={};E.prototype.name=function(){x("Firebase.name",0,0,arguments.length);return this.path.f()?null:Na(this.path)};E.prototype.name=E.prototype.name;
|
||||
E.prototype.G=function(a){x("Firebase.child",1,1,arguments.length);if(ga(a))a=String(a);else if(!(a instanceof F))if(null===C(this.path)){var b=a;b&&(b=b.replace(/^\/*\.info(\/|$)/,"/"));Ia("Firebase.child",b)}else Ia("Firebase.child",a);return new E(this.m,this.path.G(a))};E.prototype.child=E.prototype.G;E.prototype.parent=function(){x("Firebase.parent",0,0,arguments.length);var a=this.path.parent();return null===a?null:new E(this.m,a)};E.prototype.parent=E.prototype.parent;
|
||||
E.prototype.root=function(){x("Firebase.ref",0,0,arguments.length);for(var a=this;null!==a.parent();)a=a.parent();return a};E.prototype.root=E.prototype.root;E.prototype.toString=function(){x("Firebase.toString",0,0,arguments.length);var a;if(null===this.parent())a=this.m.toString();else{a=this.parent().toString()+"/";var b=this.name();a+=encodeURIComponent(String(b))}return a};E.prototype.toString=E.prototype.toString;
|
||||
E.prototype.set=function(a,b){x("Firebase.set",1,2,arguments.length);B("Firebase.set",this.path);Aa("Firebase.set",a,!1);z("Firebase.set",2,b,!0);this.m.jb(this.path,a,null,b)};E.prototype.set=E.prototype.set;
|
||||
E.prototype.update=function(a,b){x("Firebase.update",1,2,arguments.length);B("Firebase.update",this.path);if(ea(a)){for(var c={},d=0;d<a.length;++d)c[""+d]=a[d];a=c;L("Passing an Array to Firebase.update() is deprecated. Use set() if you want to overwrite the existing data, or an Object with integer keys if you really do want to only update some of the children.")}Ea("Firebase.update",a);z("Firebase.update",2,b,!0);if(A(a,".priority"))throw Error("update() does not currently support updating .priority.");
|
||||
this.m.update(this.path,a,b)};E.prototype.update=E.prototype.update;E.prototype.jb=function(a,b,c){x("Firebase.setWithPriority",2,3,arguments.length);B("Firebase.setWithPriority",this.path);Aa("Firebase.setWithPriority",a,!1);Fa("Firebase.setWithPriority",2,b,!1);z("Firebase.setWithPriority",3,c,!0);if(".length"===this.name()||".keys"===this.name())throw"Firebase.setWithPriority failed: "+this.name()+" is a read-only object.";this.m.jb(this.path,a,b,c)};E.prototype.setWithPriority=E.prototype.jb;
|
||||
E.prototype.remove=function(a){x("Firebase.remove",0,1,arguments.length);B("Firebase.remove",this.path);z("Firebase.remove",1,a,!0);this.set(null,a)};E.prototype.remove=E.prototype.remove;
|
||||
E.prototype.transaction=function(a,b,c){x("Firebase.transaction",1,3,arguments.length);B("Firebase.transaction",this.path);z("Firebase.transaction",1,a,!1);z("Firebase.transaction",2,b,!0);if(m(c)&&"boolean"!=typeof c)throw Error(y("Firebase.transaction",3,!0)+"must be a boolean.");if(".length"===this.name()||".keys"===this.name())throw"Firebase.transaction failed: "+this.name()+" is a read-only object.";"undefined"===typeof c&&(c=!0);He(this.m,this.path,a,b,c)};E.prototype.transaction=E.prototype.transaction;
|
||||
E.prototype.Sc=function(a,b){x("Firebase.setPriority",1,2,arguments.length);B("Firebase.setPriority",this.path);Fa("Firebase.setPriority",1,a,!1);z("Firebase.setPriority",2,b,!0);this.m.Sc(this.path,a,b)};E.prototype.setPriority=E.prototype.Sc;E.prototype.push=function(a,b){x("Firebase.push",0,2,arguments.length);B("Firebase.push",this.path);Aa("Firebase.push",a,!0);z("Firebase.push",2,b,!0);var c=ye(this.m),c=Se(c),c=this.G(c);"undefined"!==typeof a&&null!==a&&c.set(a,b);return c};
|
||||
E.prototype.push=E.prototype.push;E.prototype.ia=function(){return new $(this.m,this.path,this.name())};E.prototype.onDisconnect=E.prototype.ia;E.prototype.Wd=function(){L("FirebaseRef.removeOnDisconnect() being deprecated. Please use FirebaseRef.onDisconnect().remove() instead.");this.ia().remove();Ge(this.m)};E.prototype.removeOnDisconnect=E.prototype.Wd;
|
||||
E.prototype.$d=function(a){L("FirebaseRef.setOnDisconnect(value) being deprecated. Please use FirebaseRef.onDisconnect().set(value) instead.");this.ia().set(a);Ge(this.m)};E.prototype.setOnDisconnect=E.prototype.$d;E.prototype.lb=function(a,b,c){x("Firebase.auth",1,3,arguments.length);if(!p(a))throw Error(y("Firebase.auth",1,!1)+"must be a valid credential (a string).");z("Firebase.auth",2,b,!0);z("Firebase.auth",3,b,!0);this.m.lb(a,b,c)};E.prototype.auth=E.prototype.lb;
|
||||
E.prototype.Ob=function(a){x("Firebase.unauth",0,1,arguments.length);z("Firebase.unauth",1,a,!0);this.m.Ob(a)};E.prototype.unauth=E.prototype.Ob;E.goOffline=function(){x("Firebase.goOffline",0,0,arguments.length);Y.qb().Ma()};E.goOnline=function(){x("Firebase.goOnline",0,0,arguments.length);Y.qb().ib()};
|
||||
function Lb(a,b){v(!b||!0===a||!1===a,"Can't turn on custom loggers persistently.");!0===a?("undefined"!==typeof console&&("function"===typeof console.log?Jb=q(console.log,console):"object"===typeof console.log&&(Jb=function(a){console.log(a)})),b&&ob.set("logging_enabled",!0)):a?Jb=a:(Jb=null,ob.remove("logging_enabled"))}E.enableLogging=Lb;E.ServerValue={TIMESTAMP:{".sv":"timestamp"}};E.SDK_VERSION="1.0.24";E.INTERNAL=Z;E.Context=Y;})();
|
43
bower_components/firechat/.bower.json
vendored
Normal file
43
bower_components/firechat/.bower.json
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "firechat",
|
||||
"description": "Firechat: Real-time Chat powered by Firebase",
|
||||
"version": "1.0.0",
|
||||
"authors": [
|
||||
"Firebase <support@firebase.com> (https://www.firebase.com/)"
|
||||
],
|
||||
"homepage": "https://github.com/firebase/firechat/",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/firechat.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"chat",
|
||||
"realtime",
|
||||
"Firebase",
|
||||
"websocket",
|
||||
"authentication",
|
||||
"synchronization"
|
||||
],
|
||||
"main": [
|
||||
"dist/0.1.6/firechat-default.min.css",
|
||||
"dist/0.1.6/firechat-default.min.js"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules/"
|
||||
],
|
||||
"dependencies": {
|
||||
"firebase": "1.0.x"
|
||||
},
|
||||
"_release": "1.0.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.0",
|
||||
"commit": "459361a9676a9912363ebf540565e111fa7e348e"
|
||||
},
|
||||
"_source": "git://github.com/firebase/firechat.git",
|
||||
"_target": "~1.0.0",
|
||||
"_originalSource": "firechat",
|
||||
"_direct": true
|
||||
}
|
97
bower_components/firechat/Gruntfile.js
vendored
Normal file
97
bower_components/firechat/Gruntfile.js
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
module.exports = function(grunt) {
|
||||
|
||||
"use strict";
|
||||
|
||||
// Initializes the Grunt tasks with the following settings
|
||||
grunt.initConfig({
|
||||
|
||||
// A list of files which will be syntax-checked by JSHint.
|
||||
jshint: {
|
||||
files: ['src/js/shims.js', 'src/js/firechat.js', 'src/js/firechat-ui.js'],
|
||||
options: {
|
||||
regexdash: false
|
||||
}
|
||||
},
|
||||
|
||||
// Precompile templates and strip whitespace with 'processContent'.
|
||||
jst: {
|
||||
compile: {
|
||||
options: {
|
||||
path: 'templates',
|
||||
namespace: 'FirechatDefaultTemplates',
|
||||
prettify: true,
|
||||
processContent: function(src) {
|
||||
return src.replace(/(^\s+|\s+$)/gm, '');
|
||||
}
|
||||
},
|
||||
files: {
|
||||
'compiled/templates.js': ['templates/*.html']
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Compile and minify LESS CSS for production.
|
||||
less: {
|
||||
development: {
|
||||
files: {
|
||||
"build/firechat-default.css": "src/less/styles.less"
|
||||
}
|
||||
},
|
||||
production: {
|
||||
options: {
|
||||
yuicompress: true
|
||||
},
|
||||
files: {
|
||||
"build/firechat-default.min.css": "src/less/styles.less"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Concatenate files in a specific order.
|
||||
concat: {
|
||||
js: {
|
||||
src: [
|
||||
'src/js/libs/underscore-1.4.4.min.js',
|
||||
'compiled/templates.js',
|
||||
'src/js/shims.js',
|
||||
'src/js/firechat.js',
|
||||
'src/js/firechat-ui.js'
|
||||
],
|
||||
dest: 'build/firechat-default.js'
|
||||
}
|
||||
},
|
||||
|
||||
// Minify concatenated files.
|
||||
uglify: {
|
||||
dist: {
|
||||
src: ['<%= concat.js.dest %>'],
|
||||
dest: 'build/firechat-default.min.js'
|
||||
}
|
||||
},
|
||||
|
||||
// Clean up temporary files.
|
||||
clean: ['compiled/'],
|
||||
|
||||
// Tasks to execute upon file change when using `grunt watch`.
|
||||
watch: {
|
||||
src: {
|
||||
files: ['src/**/*.*', 'templates/**/*.*'],
|
||||
tasks: ['default']
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Load specific plugins, which have been installed and specified in package.json.
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-contrib-jst');
|
||||
grunt.loadNpmTasks('grunt-contrib-less');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-docco');
|
||||
|
||||
// Default task operations if simply calling `grunt` without options.
|
||||
grunt.registerTask('default', ['jshint', 'jst', 'less', 'concat', 'uglify', 'clean']);
|
||||
|
||||
};
|
19
bower_components/firechat/LICENSE
vendored
Normal file
19
bower_components/firechat/LICENSE
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
Copyright (c) 2013, Firebase.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
6
bower_components/firechat/README.md
vendored
Normal file
6
bower_components/firechat/README.md
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
Firechat.js
|
||||
===========
|
||||
|
||||
Simple, extensible chat built on [Firebase](https://www.firebase.com/?utm_source=readme&utm_medium=github&utm_campaign=firechat).
|
||||
|
||||
For demos, documentation, and integration instructions, see [https://firechat.firebaseapp.com/](https://firechat.firebaseapp.com).
|
BIN
bower_components/firechat/assets/img/icons.png
vendored
Normal file
BIN
bower_components/firechat/assets/img/icons.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
33
bower_components/firechat/bower.json
vendored
Normal file
33
bower_components/firechat/bower.json
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "firechat",
|
||||
"description": "Firechat: Real-time Chat powered by Firebase",
|
||||
"version": "1.0.0",
|
||||
"authors": [
|
||||
"Firebase <support@firebase.com> (https://www.firebase.com/)"
|
||||
],
|
||||
"homepage": "https://github.com/firebase/firechat/",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/firechat.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"chat",
|
||||
"realtime",
|
||||
"Firebase",
|
||||
"websocket",
|
||||
"authentication",
|
||||
"synchronization"
|
||||
],
|
||||
"main": [
|
||||
"dist/0.1.6/firechat-default.min.css",
|
||||
"dist/0.1.6/firechat-default.min.js"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules/"
|
||||
],
|
||||
"dependencies": {
|
||||
"firebase": "1.0.x"
|
||||
}
|
||||
}
|
944
bower_components/firechat/dist/0.1.0/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.0/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: Dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle:focus,
|
||||
#firechat .dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .dropdown-menu:before,
|
||||
#firechat .dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a:hover,
|
||||
#firechat .dropdown-menu ul > li > a:focus,
|
||||
#firechat .dropdown-menu ul > .active > a,
|
||||
#firechat .dropdown-menu ul > .active > a:hover,
|
||||
#firechat .dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .dropdown-menu ul > .disabled > a,
|
||||
#firechat .dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url('../assets/img/icons.png') no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1786
bower_components/firechat/dist/0.1.0/firechat-default.js
vendored
Normal file
1786
bower_components/firechat/dist/0.1.0/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.0/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.0/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.0/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.0/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/0.1.1/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.1/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: Dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle:focus,
|
||||
#firechat .dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .dropdown-menu:before,
|
||||
#firechat .dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a:hover,
|
||||
#firechat .dropdown-menu ul > li > a:focus,
|
||||
#firechat .dropdown-menu ul > .active > a,
|
||||
#firechat .dropdown-menu ul > .active > a:hover,
|
||||
#firechat .dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .dropdown-menu ul > .disabled > a,
|
||||
#firechat .dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,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) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1786
bower_components/firechat/dist/0.1.1/firechat-default.js
vendored
Normal file
1786
bower_components/firechat/dist/0.1.1/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.1/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.1/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.1/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.1/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/0.1.2/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.2/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: Dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle:focus,
|
||||
#firechat .dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .dropdown-menu:before,
|
||||
#firechat .dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a:hover,
|
||||
#firechat .dropdown-menu ul > li > a:focus,
|
||||
#firechat .dropdown-menu ul > .active > a,
|
||||
#firechat .dropdown-menu ul > .active > a:hover,
|
||||
#firechat .dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .dropdown-menu ul > .disabled > a,
|
||||
#firechat .dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,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) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1829
bower_components/firechat/dist/0.1.2/firechat-default.js
vendored
Normal file
1829
bower_components/firechat/dist/0.1.2/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.2/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.2/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.2/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.2/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/0.1.3/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.3/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: Dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle:focus,
|
||||
#firechat .dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .dropdown-menu:before,
|
||||
#firechat .dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a:hover,
|
||||
#firechat .dropdown-menu ul > li > a:focus,
|
||||
#firechat .dropdown-menu ul > .active > a,
|
||||
#firechat .dropdown-menu ul > .active > a:hover,
|
||||
#firechat .dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .dropdown-menu ul > .disabled > a,
|
||||
#firechat .dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,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) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1830
bower_components/firechat/dist/0.1.3/firechat-default.js
vendored
Normal file
1830
bower_components/firechat/dist/0.1.3/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.3/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.3/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.3/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.3/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/0.1.4/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.4/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: Dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle:focus,
|
||||
#firechat .dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .dropdown-menu:before,
|
||||
#firechat .dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a:hover,
|
||||
#firechat .dropdown-menu ul > li > a:focus,
|
||||
#firechat .dropdown-menu ul > .active > a,
|
||||
#firechat .dropdown-menu ul > .active > a:hover,
|
||||
#firechat .dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .dropdown-menu ul > .disabled > a,
|
||||
#firechat .dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL8AAAANEAYAAACoeGM7AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAM80lEQVR42t2cZ4xWRRfHZ3dhwbK7CJZYYiOxV+wlUQzCKmBBsWPvYjQiaiyxYUwULLErltgrNpRF4q5iV0BRLFE0diUi7LIq6Pqw74f//rzO4Zm9d+5z9c37ni//3OfemXtm5sypc58q55xzrrpauHSpcOONheedJ9x9d2Hv3sLvvxfefbfw5puFf/5Zvr+8VFUl7Ozs/rkNNxTef79w222F77wjPOoo4ccfF/O+UDvGzTVEf8wH1zU1wlJJePTRwv33Fx57rPDnn/1+wbzzG+IXvrhmPUPzY/kJEc/HzqslK1fLLy8cMUK4667CFVYQ/vqr8PXXhU884f8eL6eXXKJ2wqSd3tDY2KOHc84NGqSRnnCC7tbVCdvbhRMnasWnTdt5Z+eca2pK6797Yh6ef1641lrCPfYQfv21UNwl62qv115b2Nws/PZb4d57C3/7LftalaOQ/C63nPCII4Tsg6228scHffqp8LHHhPfe6/8eu49feEH44YfCq64S/v67cMGC7tuvu65w6FDhllsKkS/0zoQJaZzMmSO+JaEzZmgkY8b88Ydzzs2b19HhnHNffSWJ6tVLM1cq/fKLrjXiUaPUrn9/XZ9yip6rqVmyxDnnnnrKvPbAA4V6TTJxP/zgT4zdyC+9JOzXz++PgceSVSS1tUJtE+c22si/f+21Pj9Wwd54o//8ZpsJd9xR2KtX9+8vmkLzcsABPt9z5wr32af88xiOf4oaGoSHH17M+/LKg203aJDwiy+EVh5DyHzuuWcxfDn31lvOOffMM7Nn6z1SsZ2dn30m/OQT4eefC7/8UvjBB0LaVzav7D873vfeE6LQISvv3Of50P6OJetgWFp5ZeFzz5V/b1bEEd1333x80g+O4mWXCXEQMDB33CG8/XYhBhuDmMZnOn30kZ5/+23nnGtpefNN55wbP96Xl/nzhYsWCdvauEbeQP1Of6US/XRZfDz8Bx8U9uwpPPFE4eOPC/EMVl9dOG6ccORI4Q03CA87LHbA5RcCwgO47TbhokXCYcOERCKQ7GJiMLiPokeQ2QCjRwtvukkY6zHg0V10kXDAAH++EIz77hM++aRwxRWFq64q3H57v9/+/YVPPy2cOFF47rnCNE8kll/Gi4eIAWU9v/vOnz8MA4qjb18hG51+2JiLF+ebX/hA4U+b5t+/7jrhAw8IkQ88WvnPiZzi4Q0eXL6/dEJhawaGDydmk4uEQmhu1kj79tVImb8RI8TZwIG0p78ddnAubOhDhIcPIXd4nnh4OHYYzPXXF7K/ed5GBLb/NLKRFOtMfyCZAiIKns8aSVp9xP4i8nv//Ti+icjgl0iDeUsjpKDSyJYeqqs1A+3taDBpkn79Qi5YW9vf5wXq0YP+1L5U6loAUjpW4WPhQhN00EFC2SXnDj1UiAF44w2hTWnEEqkcCIWJYkShQNbDIIJZZx2h9Xhs/7EpFDwCNs6UKf584tGQsiFCGTJEuMEG/jxBzBe/H3+8cJddhBiAZ58thl/eM2uW8MgjhWyAyy8XojhRUGuuKayvF7Jhf/pJ+O67wltvFU6dGscv78fTgg45RPjII+XbYZA23bT8/Vtu8ecBDy9MpHS0EROFr1B76lQp7r32su20EwYMkGSOG4dq4I0a4fDh9G9TQN0TKR0iB8aD3G+9tRDHDoPPenKf53GYiABiPWm7f046SUgKDs8aQwxlVfiQTVXh0BChxir+kDol5WPv24im+Ahcb6iu9jVnR4euGX9oXsLj7GKYHP68eUI8ANsRA7WKE8sNkUopdvgJsW0QUBbc3oewl6GQs9LUDgr85JOF5OZHjRKyESZNEp55ppBIC7IbxgoSkQzt2OgXX1wMv9RCFBAuG4HgSREKU0vB42Jjo6gxtPvtJ8TzTM91+kQOf731hHj4KHybA0bRK8B1bpNNhAqkE8OH40CKLZ3I4a+0kq6l8JuapPAbGx991Lm/r5s8+aFDlWOdOVMuS0ODNm5bm1RWSwsSrJY2FZVGRFYYYgwt+wO5EpeJ4eaa+zxPexQ+/Wcl+iFCxeBvs43QRujW048lu09Y16KI/m3Ewu8h/VS55w/5b7AGMrbW5lyXImQh8EhtqGBDGOu525QDnm5RhOcBzZ8vfO01IYIaev/Mmf5zpALsfSiv5bYLfeqpQhSUrYHY92GYbD+shx0XKSOKlrFk1xHFTQRon7M1FNtepaOErwsvFBIqkzKKlQ8MDoTnCpFKwyCi2FZbTYhDgydO6gfaaaesnFC0xQcUUQwlBi6VpPCHDJGKmDyZGWMldY2nPmmSP5NEdlkJRYSCZr7FRbiIzTX3eZ72tiiclZjf444rzyd6hkid9+fNCNhxvfJKvn5C/YVy9nZVYw89ZCdfI6TVEuCLCI4Zhp+Ojq6FIAdLFR0PjpQOFpyFsQMidw5ZxRo7ATaEI6fMgFD8FJsxXCgee00qSiWPJNfKaYLp08u/P1YQ4ZfxWgWDAcOjZmMR8G+3nZBTPbwffhYuFJ5zjhCPKi9ZBUzkh8dpBTkk2KSKLr1UiAIJEYYhK2GQIOto4OGj8NdYQ4hck8tnvkmtQSGDHKK6On8nUNtIPHwUvp05SeSwYTI1s2YpJhk5kliO/uP4Qe6IxMnhk9JhXqyCtQ4Oz9Oe/nwzl05EtJbI5fMeTs8QscIP+zwtEuA+csz+fvjhOH5tf6SSoZCjEipeKw5MVj12PemZ9tXVvunt2dOuHE+K06oqvbG2lp2ikS1ZIknv3burO45lXn+9kKItOfzQwhO6jR0r5PiXPaUQmzNHkMllIyhMMBudmgKnjqxnwnSssooQhWpTLOR6UVwc/4ul1lYhx7rwRBF4PBEEwxLFavhkeTmmN2aMEAG3ghdrqHx149z555efx9DGY37vvFNoPcxQe1v0SyObe8cRIYf/4otCPHwUPsVge4yXWgTEumWl9nZtsPp6irbk8OVyTJ5sYyRJdGOjkitJjUP3FyzwNzIOV1ZivdinFG3J4dt5twqW9eJ5nUFKDIB1xNIIh8p6oijUa64RcnyT2SLSJHWXdtqKcdD/BRcIifBiCf44TIGe2WILYaiGhWHFoaFGxnxtvnlWDvwZY/yLF6toy+8LF2rGamrESXK8WRIwe7YcjKYmzdD06Xpi7lzFWqR4/1pYeywMT5ncL4rpiiuE9tgnIRyeozP9ZyVSBNZyskHxpFFUCGroOCf36Zf28MtzRCqxOXPaM24iJxsJQQgOCgyiqM4GJvduKZRbjOWXXH+fPkKKiUQmOnyYRBrwZeeXCIxxQ/mPSfpEkZn3KZO+7PHiH38U2mKurQHY478ooHSSaZswgWOZum5uFra2iqPOTs0g93EE4NzWAKZM4RioIoDx4/PNE4YQxWNTs6HUgL1Pe3sMNCuF9qOVG2penIPHYOHokcJ8+WVhS4sQR4NaJP3F7luI9tSALBFxovhBW6uonFSORm7mzMEAzJjhnHMNDdLI9fXgq68651xdnZLYffpY+cpIhLzkUNNySd98I7QKFPs0cGC+4dv3sCAYIE4bhXJboWvwrruExxwjJPWStyjD8/b0AyEiCt4Wh6xBpCi+225CG5kUdWogxC/HMyldshGJ7IhcWIfTTxciLxhWqKgcJxuPc/h2nTAAaYrq4IP9dni01jCEiVM3nIdWdaizUxuTDdvaSgQQ6kfPNTVhKPgOgP7j5id0Dh9DbR05Unlch54PfQeQRuyrUM7ZOoxkCq6+WkikhiOBIQ/JEx7sGWfE8QlZOYKyOi7sS+uQgdn3ra/4LT/ZSS1razEEfBgoOf0rdRUaIB4rXyCedpqQFAu5KzxdPyBJPPRlj7d1Tw89JLznHiGeb+hDFVIWIQPll9SS3ynKUUwj5RWbI6Q/inWVEgJsUxRFKdKi+T3rLKEtshf9IZytPdgIgNM75PA5dWQ9fBAFE0+cu+dDGQyAHwGMHi0P/sordT12LB4+Ct//0Cbvh1zWINr9gAePIYe4thGCbU//sYRHn/fDLBwyawhDOfe8ESbvCx3/zHuKJp5Cil8cVlVlxcjXhv5yICvh4aPwreDlJY5nUay1Cj2rINn2lD4qPX6KwcPzRQHhKeP5WeQ+ng2nSyhCcv4fKip1EuIXRQlfXIMUn7nPl9SkhKhFFM2v7QcDEIoAQoiHbxV+5V/uEgGQAuJLXRQ7X/KS0sHD///8cpcIl/P69MN3GDh2RBzUvvjLFVI2NuK1einty+CsZDMY/z0qyuOvkGwIY8+zMuE2ZYGHj8JHUWQlm/sm1ENRZ81dWrShLEVAy1/20F9EEZrTQnk9HJCNYL+YLMrD+F/jF7IbnBQQNQDOi/MFJ9fk8O26xisMQmb7OykaagD+p/RLl3JNDj+U0gn13z0xLhQ0BtEqfLtP7TXP057+YvcDCpvDInwvYInUcnIqqjLKK2/IydlnF8NHfvq3FP9/ANgTCJ9z9ZF7AAAAAElFTkSuQmCC) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1831
bower_components/firechat/dist/0.1.4/firechat-default.js
vendored
Normal file
1831
bower_components/firechat/dist/0.1.4/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.4/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.4/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.4/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.4/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/0.1.5/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.5/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: Dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle:focus,
|
||||
#firechat .dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .dropdown-menu:before,
|
||||
#firechat .dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .dropdown-menu ul > li > a:hover,
|
||||
#firechat .dropdown-menu ul > li > a:focus,
|
||||
#firechat .dropdown-menu ul > .active > a,
|
||||
#firechat .dropdown-menu ul > .active > a:hover,
|
||||
#firechat .dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .dropdown-menu ul > .disabled > a,
|
||||
#firechat .dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,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) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1831
bower_components/firechat/dist/0.1.5/firechat-default.js
vendored
Normal file
1831
bower_components/firechat/dist/0.1.5/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.5/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.5/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.5/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.5/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/0.1.6/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/0.1.6/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .firechat-dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .firechat-dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .firechat-dropdown-toggle:focus,
|
||||
#firechat .firechat-dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .firechat-dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu:before,
|
||||
#firechat .firechat-dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > li > a:hover,
|
||||
#firechat .firechat-dropdown-menu ul > li > a:focus,
|
||||
#firechat .firechat-dropdown-menu ul > .active > a,
|
||||
#firechat .firechat-dropdown-menu ul > .active > a:hover,
|
||||
#firechat .firechat-dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > .disabled > a,
|
||||
#firechat .firechat-dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .firechat-dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .firechat-dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .firechat-dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .firechat-dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .firechat-dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .firechat-dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,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) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1855
bower_components/firechat/dist/0.1.6/firechat-default.js
vendored
Normal file
1855
bower_components/firechat/dist/0.1.6/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/0.1.6/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/0.1.6/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/0.1.6/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/0.1.6/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
944
bower_components/firechat/dist/1.0.0/firechat-default.css
vendored
Normal file
944
bower_components/firechat/dist/1.0.0/firechat-default.css
vendored
Normal file
@ -0,0 +1,944 @@
|
||||
@charset "UTF-8";
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat div,
|
||||
#firechat span,
|
||||
#firechat applet,
|
||||
#firechat object,
|
||||
#firechat iframe,
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6,
|
||||
#firechat p,
|
||||
#firechat blockquote,
|
||||
#firechat pre,
|
||||
#firechat a,
|
||||
#firechat abbr,
|
||||
#firechat acronym,
|
||||
#firechat address,
|
||||
#firechat big,
|
||||
#firechat cite,
|
||||
#firechat code,
|
||||
#firechat del,
|
||||
#firechat dfn,
|
||||
#firechat em,
|
||||
#firechat img,
|
||||
#firechat ins,
|
||||
#firechat kbd,
|
||||
#firechat q,
|
||||
#firechat s,
|
||||
#firechat samp,
|
||||
#firechat small,
|
||||
#firechat strike,
|
||||
#firechat strong,
|
||||
#firechat sub,
|
||||
#firechat sup,
|
||||
#firechat tt,
|
||||
#firechat var,
|
||||
#firechat b,
|
||||
#firechat u,
|
||||
#firechat i,
|
||||
#firechat center,
|
||||
#firechat dl,
|
||||
#firechat dt,
|
||||
#firechat dd,
|
||||
#firechat ol,
|
||||
#firechat ul,
|
||||
#firechat li,
|
||||
#firechat fieldset,
|
||||
#firechat form,
|
||||
#firechat label,
|
||||
#firechat legend,
|
||||
#firechat table,
|
||||
#firechat caption,
|
||||
#firechat tbody,
|
||||
#firechat tfoot,
|
||||
#firechat thead,
|
||||
#firechat tr,
|
||||
#firechat th,
|
||||
#firechat td,
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat canvas,
|
||||
#firechat details,
|
||||
#firechat embed,
|
||||
#firechat figure,
|
||||
#firechat figcaption,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat output,
|
||||
#firechat ruby,
|
||||
#firechat section,
|
||||
#firechat summary,
|
||||
#firechat time,
|
||||
#firechat mark,
|
||||
#firechat audio,
|
||||
#firechat video {
|
||||
border: 0;
|
||||
font-size: 12px;
|
||||
font-family: arial, helvetica, sans-serif;
|
||||
vertical-align: baseline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#firechat article,
|
||||
#firechat aside,
|
||||
#firechat details,
|
||||
#firechat figcaption,
|
||||
#firechat figure,
|
||||
#firechat footer,
|
||||
#firechat header,
|
||||
#firechat hgroup,
|
||||
#firechat menu,
|
||||
#firechat nav,
|
||||
#firechat section {
|
||||
display: block;
|
||||
}
|
||||
#firechat body {
|
||||
line-height: 1;
|
||||
}
|
||||
#firechat ol,
|
||||
#firechat ul {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat blockquote,
|
||||
#firechat q {
|
||||
quotes: none;
|
||||
}
|
||||
#firechat blockquote:before,
|
||||
#firechat blockquote:after,
|
||||
#firechat q:before,
|
||||
#firechat q:after {
|
||||
content: none;
|
||||
}
|
||||
#firechat table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
#firechat .center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
#firechat .left {
|
||||
float: left !important;
|
||||
}
|
||||
#firechat .right {
|
||||
float: right !important;
|
||||
}
|
||||
#firechat .alignleft {
|
||||
text-align: left !important;
|
||||
}
|
||||
#firechat .alignright {
|
||||
text-align: right !important;
|
||||
}
|
||||
#firechat .aligncenter {
|
||||
text-align: center !important;
|
||||
}
|
||||
#firechat .hidden {
|
||||
display: none !important;
|
||||
}
|
||||
#firechat .row {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .fifth,
|
||||
#firechat .fivesixth,
|
||||
#firechat .fourfifth,
|
||||
#firechat .half,
|
||||
#firechat .ninetenth,
|
||||
#firechat .quarter,
|
||||
#firechat .sevententh,
|
||||
#firechat .sixth,
|
||||
#firechat .tenth,
|
||||
#firechat .third,
|
||||
#firechat .threefifth,
|
||||
#firechat .threequarter,
|
||||
#firechat .threetenth,
|
||||
#firechat .twofifth,
|
||||
#firechat .twothird,
|
||||
#firechat .full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
#firechat .fifth:first-child,
|
||||
#firechat .fivesixth:first-child,
|
||||
#firechat .fourfifth:first-child,
|
||||
#firechat .half:first-child,
|
||||
#firechat .ninetenth:first-child,
|
||||
#firechat .quarter:first-child,
|
||||
#firechat .sevententh:first-child,
|
||||
#firechat .sixth:first-child,
|
||||
#firechat .tenth:first-child,
|
||||
#firechat .third:first-child,
|
||||
#firechat .threefifth:first-child,
|
||||
#firechat .threequarter:first-child,
|
||||
#firechat .threetenth:first-child,
|
||||
#firechat .twofifth:first-child,
|
||||
#firechat .twothird:first-child,
|
||||
#firechat .full:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
#firechat .tenth {
|
||||
width: 8.08510638297872%;
|
||||
}
|
||||
#firechat .sixth {
|
||||
width: 14.893617021276595%;
|
||||
}
|
||||
#firechat .fifth {
|
||||
width: 18.297872340425535%;
|
||||
}
|
||||
#firechat .quarter {
|
||||
width: 23.404255319148938%;
|
||||
}
|
||||
#firechat .threetenth {
|
||||
width: 26.3829787235%;
|
||||
}
|
||||
#firechat .third {
|
||||
width: 31.914893617021278%;
|
||||
}
|
||||
#firechat .twofifth {
|
||||
width: 38.72340425531915%;
|
||||
}
|
||||
#firechat .half {
|
||||
width: 48.93617021276596%;
|
||||
}
|
||||
#firechat .sevententh {
|
||||
width: 58.7234042555%;
|
||||
}
|
||||
#firechat .threefifth {
|
||||
width: 59.14893617021278%;
|
||||
}
|
||||
#firechat .twothird {
|
||||
width: 65.95744680851064%;
|
||||
}
|
||||
#firechat .threequarter {
|
||||
width: 74.46808510638297%;
|
||||
}
|
||||
#firechat .ninetenth {
|
||||
width: 74.8936170215%;
|
||||
}
|
||||
#firechat .fourfifth {
|
||||
width: 79.57446808510639%;
|
||||
}
|
||||
#firechat .fivesixth {
|
||||
width: 82.9787234042553%;
|
||||
}
|
||||
#firechat .full {
|
||||
width: 100%;
|
||||
}
|
||||
#firechat .clipped {
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
#firechat em {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat label {
|
||||
display: block;
|
||||
}
|
||||
#firechat a {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat a:visited,
|
||||
#firechat a:hover,
|
||||
#firechat a:active {
|
||||
color: #005580;
|
||||
}
|
||||
#firechat p {
|
||||
margin: 10px 0;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3,
|
||||
#firechat h4,
|
||||
#firechat h5,
|
||||
#firechat h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
#firechat h1,
|
||||
#firechat h2,
|
||||
#firechat h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
#firechat h1 {
|
||||
font-size: 38.5px;
|
||||
}
|
||||
#firechat h2 {
|
||||
font-size: 31.5px;
|
||||
}
|
||||
#firechat h3 {
|
||||
font-size: 24.5px;
|
||||
}
|
||||
#firechat h4 {
|
||||
font-size: 17.5px;
|
||||
}
|
||||
#firechat h5 {
|
||||
font-size: 14px;
|
||||
}
|
||||
#firechat h6 {
|
||||
font-size: 11.9px;
|
||||
}
|
||||
#firechat small {
|
||||
font-size: 90%;
|
||||
}
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat .nav {
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .nav > li > a:hover,
|
||||
#firechat .nav > li > a:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
#firechat .nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
#firechat .nav-tabs > li > a {
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
#firechat .nav-tabs > .active > a,
|
||||
#firechat .nav-tabs > .active > a:hover,
|
||||
#firechat .nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
#firechat .tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
#firechat .tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
/* Component: dropdowns
|
||||
============================================================ */
|
||||
#firechat .caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#firechat .firechat-dropdown {
|
||||
position: relative;
|
||||
}
|
||||
#firechat .firechat-dropdown-toggle {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .firechat-dropdown-toggle:focus,
|
||||
#firechat .firechat-dropdown-toggle:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
#firechat .firechat-dropdown-toggle.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu {
|
||||
*zoom: 1;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu:before,
|
||||
#firechat .firechat-dropdown-menu:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu:after {
|
||||
clear: both;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > li > a:hover,
|
||||
#firechat .firechat-dropdown-menu ul > li > a:focus,
|
||||
#firechat .firechat-dropdown-menu ul > .active > a,
|
||||
#firechat .firechat-dropdown-menu ul > .active > a:hover,
|
||||
#firechat .firechat-dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .firechat-dropdown-menu ul > .disabled > a,
|
||||
#firechat .firechat-dropdown-menu ul > .disabled > a:hover,
|
||||
#firechat .firechat-dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
#firechat .firechat-dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .firechat-dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat .open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
#firechat .open > .firechat-dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .open > .firechat-dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat .prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
#firechat .prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.45);
|
||||
}
|
||||
#firechat .prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
-webkit-border-bottom-right-radius: 0;
|
||||
-webkit-border-bottom-left-radius: 0;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-moz-border-radius-bottomright: 0;
|
||||
-moz-border-radius-bottomleft: 0;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
border-top-left-radius: 4px;
|
||||
}
|
||||
#firechat .prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#firechat .prompt-header a.close:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
#firechat .prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
#firechat .prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-top-right-radius: 0;
|
||||
-webkit-border-bottom-right-radius: 4px;
|
||||
-webkit-border-bottom-left-radius: 4px;
|
||||
-webkit-border-top-left-radius: 0;
|
||||
-moz-border-radius-topright: 0;
|
||||
-moz-border-radius-bottomright: 4px;
|
||||
-moz-border-radius-bottomleft: 4px;
|
||||
-moz-border-radius-topleft: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
#firechat .prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
#firechat .btn {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position 0.1s linear;
|
||||
-moz-transition: background-position 0.1s linear;
|
||||
-o-transition: background-position 0.1s linear;
|
||||
transition: background-position 0.1s linear;
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
-webkit-box-shadow: inherit;
|
||||
-moz-box-shadow: inherit;
|
||||
box-shadow: inherit;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat .contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
#firechat .contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .contextmenu ul > li > a:hover,
|
||||
#firechat .contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
}
|
||||
#firechat input,
|
||||
#firechat textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 1px;
|
||||
-moz-border-radius: 1px;
|
||||
border-radius: 1px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
#firechat input:-moz-placeholder,
|
||||
#firechat textarea:-moz-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input:-ms-input-placeholder,
|
||||
#firechat textarea:-ms-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input::-webkit-input-placeholder,
|
||||
#firechat textarea::-webkit-input-placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
#firechat input[disabled],
|
||||
#firechat textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#firechat input {
|
||||
height: 24px;
|
||||
}
|
||||
#firechat textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat .search-wrapper {
|
||||
-webkit-border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
}
|
||||
#firechat .search-wrapper > input[type=text]:focus,
|
||||
#firechat .search-wrapper > input[type=text]:active {
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
#firechat .chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
#firechat .message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
#firechat .message.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
#firechat .message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
#firechat .message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#firechat .message:nth-child(odd).highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
#firechat .message:nth-child(odd).message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
#firechat .message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
}
|
||||
#firechat .message-content.red {
|
||||
color: red;
|
||||
}
|
||||
#firechat .message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
#firechat ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
#firechat #firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat #firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat #firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat #firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat .tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu .firechat-dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
#firechat .tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
#firechat .icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL8AAAANEAYAAACoeGM7AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAM80lEQVR42t2cZ4xWRRfHZ3dhwbK7CJZYYiOxV+wlUQzCKmBBsWPvYjQiaiyxYUwULLErltgrNpRF4q5iV0BRLFE0diUi7LIq6Pqw74f//rzO4Zm9d+5z9c37ni//3OfemXtm5sypc58q55xzrrpauHSpcOONheedJ9x9d2Hv3sLvvxfefbfw5puFf/5Zvr+8VFUl7Ozs/rkNNxTef79w222F77wjPOoo4ccfF/O+UDvGzTVEf8wH1zU1wlJJePTRwv33Fx57rPDnn/1+wbzzG+IXvrhmPUPzY/kJEc/HzqslK1fLLy8cMUK4667CFVYQ/vqr8PXXhU884f8eL6eXXKJ2wqSd3tDY2KOHc84NGqSRnnCC7tbVCdvbhRMnasWnTdt5Z+eca2pK6797Yh6ef1641lrCPfYQfv21UNwl62qv115b2Nws/PZb4d57C3/7LftalaOQ/C63nPCII4Tsg6228scHffqp8LHHhPfe6/8eu49feEH44YfCq64S/v67cMGC7tuvu65w6FDhllsKkS/0zoQJaZzMmSO+JaEzZmgkY8b88Ydzzs2b19HhnHNffSWJ6tVLM1cq/fKLrjXiUaPUrn9/XZ9yip6rqVmyxDnnnnrKvPbAA4V6TTJxP/zgT4zdyC+9JOzXz++PgceSVSS1tUJtE+c22si/f+21Pj9Wwd54o//8ZpsJd9xR2KtX9+8vmkLzcsABPt9z5wr32af88xiOf4oaGoSHH17M+/LKg203aJDwiy+EVh5DyHzuuWcxfDn31lvOOffMM7Nn6z1SsZ2dn30m/OQT4eefC7/8UvjBB0LaVzav7D873vfeE6LQISvv3Of50P6OJetgWFp5ZeFzz5V/b1bEEd1333x80g+O4mWXCXEQMDB33CG8/XYhBhuDmMZnOn30kZ5/+23nnGtpefNN55wbP96Xl/nzhYsWCdvauEbeQP1Of6US/XRZfDz8Bx8U9uwpPPFE4eOPC/EMVl9dOG6ccORI4Q03CA87LHbA5RcCwgO47TbhokXCYcOERCKQ7GJiMLiPokeQ2QCjRwtvukkY6zHg0V10kXDAAH++EIz77hM++aRwxRWFq64q3H57v9/+/YVPPy2cOFF47rnCNE8kll/Gi4eIAWU9v/vOnz8MA4qjb18hG51+2JiLF+ebX/hA4U+b5t+/7jrhAw8IkQ88WvnPiZzi4Q0eXL6/dEJhawaGDydmk4uEQmhu1kj79tVImb8RI8TZwIG0p78ddnAubOhDhIcPIXd4nnh4OHYYzPXXF7K/ed5GBLb/NLKRFOtMfyCZAiIKns8aSVp9xP4i8nv//Ti+icjgl0iDeUsjpKDSyJYeqqs1A+3taDBpkn79Qi5YW9vf5wXq0YP+1L5U6loAUjpW4WPhQhN00EFC2SXnDj1UiAF44w2hTWnEEqkcCIWJYkShQNbDIIJZZx2h9Xhs/7EpFDwCNs6UKf584tGQsiFCGTJEuMEG/jxBzBe/H3+8cJddhBiAZ58thl/eM2uW8MgjhWyAyy8XojhRUGuuKayvF7Jhf/pJ+O67wltvFU6dGscv78fTgg45RPjII+XbYZA23bT8/Vtu8ecBDy9MpHS0EROFr1B76lQp7r32su20EwYMkGSOG4dq4I0a4fDh9G9TQN0TKR0iB8aD3G+9tRDHDoPPenKf53GYiABiPWm7f046SUgKDs8aQwxlVfiQTVXh0BChxir+kDol5WPv24im+Ahcb6iu9jVnR4euGX9oXsLj7GKYHP68eUI8ANsRA7WKE8sNkUopdvgJsW0QUBbc3oewl6GQs9LUDgr85JOF5OZHjRKyESZNEp55ppBIC7IbxgoSkQzt2OgXX1wMv9RCFBAuG4HgSREKU0vB42Jjo6gxtPvtJ8TzTM91+kQOf731hHj4KHybA0bRK8B1bpNNhAqkE8OH40CKLZ3I4a+0kq6l8JuapPAbGx991Lm/r5s8+aFDlWOdOVMuS0ODNm5bm1RWSwsSrJY2FZVGRFYYYgwt+wO5EpeJ4eaa+zxPexQ+/Wcl+iFCxeBvs43QRujW048lu09Y16KI/m3Ewu8h/VS55w/5b7AGMrbW5lyXImQh8EhtqGBDGOu525QDnm5RhOcBzZ8vfO01IYIaev/Mmf5zpALsfSiv5bYLfeqpQhSUrYHY92GYbD+shx0XKSOKlrFk1xHFTQRon7M1FNtepaOErwsvFBIqkzKKlQ8MDoTnCpFKwyCi2FZbTYhDgydO6gfaaaesnFC0xQcUUQwlBi6VpPCHDJGKmDyZGWMldY2nPmmSP5NEdlkJRYSCZr7FRbiIzTX3eZ72tiiclZjf444rzyd6hkid9+fNCNhxvfJKvn5C/YVy9nZVYw89ZCdfI6TVEuCLCI4Zhp+Ojq6FIAdLFR0PjpQOFpyFsQMidw5ZxRo7ATaEI6fMgFD8FJsxXCgee00qSiWPJNfKaYLp08u/P1YQ4ZfxWgWDAcOjZmMR8G+3nZBTPbwffhYuFJ5zjhCPKi9ZBUzkh8dpBTkk2KSKLr1UiAIJEYYhK2GQIOto4OGj8NdYQ4hck8tnvkmtQSGDHKK6On8nUNtIPHwUvp05SeSwYTI1s2YpJhk5kliO/uP4Qe6IxMnhk9JhXqyCtQ4Oz9Oe/nwzl05EtJbI5fMeTs8QscIP+zwtEuA+csz+fvjhOH5tf6SSoZCjEipeKw5MVj12PemZ9tXVvunt2dOuHE+K06oqvbG2lp2ikS1ZIknv3burO45lXn+9kKItOfzQwhO6jR0r5PiXPaUQmzNHkMllIyhMMBudmgKnjqxnwnSssooQhWpTLOR6UVwc/4ul1lYhx7rwRBF4PBEEwxLFavhkeTmmN2aMEAG3ghdrqHx149z555efx9DGY37vvFNoPcxQe1v0SyObe8cRIYf/4otCPHwUPsVge4yXWgTEumWl9nZtsPp6irbk8OVyTJ5sYyRJdGOjkitJjUP3FyzwNzIOV1ZivdinFG3J4dt5twqW9eJ5nUFKDIB1xNIIh8p6oijUa64RcnyT2SLSJHWXdtqKcdD/BRcIifBiCf44TIGe2WILYaiGhWHFoaFGxnxtvnlWDvwZY/yLF6toy+8LF2rGamrESXK8WRIwe7YcjKYmzdD06Xpi7lzFWqR4/1pYeywMT5ncL4rpiiuE9tgnIRyeozP9ZyVSBNZyskHxpFFUCGroOCf36Zf28MtzRCqxOXPaM24iJxsJQQgOCgyiqM4GJvduKZRbjOWXXH+fPkKKiUQmOnyYRBrwZeeXCIxxQ/mPSfpEkZn3KZO+7PHiH38U2mKurQHY478ooHSSaZswgWOZum5uFra2iqPOTs0g93EE4NzWAKZM4RioIoDx4/PNE4YQxWNTs6HUgL1Pe3sMNCuF9qOVG2penIPHYOHokcJ8+WVhS4sQR4NaJP3F7luI9tSALBFxovhBW6uonFSORm7mzMEAzJjhnHMNDdLI9fXgq68651xdnZLYffpY+cpIhLzkUNNySd98I7QKFPs0cGC+4dv3sCAYIE4bhXJboWvwrruExxwjJPWStyjD8/b0AyEiCt4Wh6xBpCi+225CG5kUdWogxC/HMyldshGJ7IhcWIfTTxciLxhWqKgcJxuPc/h2nTAAaYrq4IP9dni01jCEiVM3nIdWdaizUxuTDdvaSgQQ6kfPNTVhKPgOgP7j5id0Dh9DbR05Unlch54PfQeQRuyrUM7ZOoxkCq6+WkikhiOBIQ/JEx7sGWfE8QlZOYKyOi7sS+uQgdn3ra/4LT/ZSS1razEEfBgoOf0rdRUaIB4rXyCedpqQFAu5KzxdPyBJPPRlj7d1Tw89JLznHiGeb+hDFVIWIQPll9SS3ynKUUwj5RWbI6Q/inWVEgJsUxRFKdKi+T3rLKEtshf9IZytPdgIgNM75PA5dWQ9fBAFE0+cu+dDGQyAHwGMHi0P/sordT12LB4+Ct//0Cbvh1zWINr9gAePIYe4thGCbU//sYRHn/fDLBwyawhDOfe8ESbvCx3/zHuKJp5Cil8cVlVlxcjXhv5yICvh4aPwreDlJY5nUay1Cj2rINn2lD4qPX6KwcPzRQHhKeP5WeQ+ng2nSyhCcv4fKip1EuIXRQlfXIMUn7nPl9SkhKhFFM2v7QcDEIoAQoiHbxV+5V/uEgGQAuJLXRQ7X/KS0sHD///8cpcIl/P69MN3GDh2RBzUvvjLFVI2NuK1einty+CsZDMY/z0qyuOvkGwIY8+zMuE2ZYGHj8JHUWQlm/sm1ENRZ81dWrShLEVAy1/20F9EEZrTQnk9HJCNYL+YLMrD+F/jF7IbnBQQNQDOi/MFJ9fk8O26xisMQmb7OykaagD+p/RLl3JNDj+U0gn13z0xLhQ0BtEqfLtP7TXP057+YvcDCpvDInwvYInUcnIqqjLKK2/IydlnF8NHfvq3FP9/ANgTCJ9z9ZF7AAAAAElFTkSuQmCC) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
}
|
||||
#firechat .icon.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
#firechat .icon.search {
|
||||
background-position: 0 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.close {
|
||||
background-position: -120px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-chat {
|
||||
background-position: -138px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-group {
|
||||
background-position: -18px 0;
|
||||
width: 17px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute {
|
||||
background-position: -84px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon.user-mute.red {
|
||||
background-position: -102px 0;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
}
|
||||
#firechat .icon:hover,
|
||||
#firechat .btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
#firechat a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
1869
bower_components/firechat/dist/1.0.0/firechat-default.js
vendored
Normal file
1869
bower_components/firechat/dist/1.0.0/firechat-default.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/dist/1.0.0/firechat-default.min.css
vendored
Normal file
1
bower_components/firechat/dist/1.0.0/firechat-default.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
2
bower_components/firechat/dist/1.0.0/firechat-default.min.js
vendored
Normal file
2
bower_components/firechat/dist/1.0.0/firechat-default.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
61
bower_components/firechat/examples/anonymous_auth.html
vendored
Normal file
61
bower_components/firechat/examples/anonymous_auth.html
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<script src="https://cdn.firebase.com/v0/firebase.js"></script>
|
||||
<script src="https://cdn.firebase.com/v0/firebase-simple-login.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
|
||||
|
||||
<!-- Download from https://github.com/firebase/Firechat -->
|
||||
<link rel="stylesheet" href="../dist/0.1.5/firechat-default.min.css" />
|
||||
<script src="../dist/0.1.5/firechat-default.min.js"></script>
|
||||
<style>
|
||||
#firechat-wrapper {
|
||||
height: 475px;
|
||||
max-width: 325px;
|
||||
padding: 10px;
|
||||
border: 1px solid #ccc;
|
||||
background-color: #fff;
|
||||
margin: 50px auto;
|
||||
text-align: center;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 5px 25px #666;
|
||||
-moz-box-shadow: 0 5px 25px #666;
|
||||
box-shadow: 0 5px 25px #666;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<!--
|
||||
Example: Anonymous Authentication
|
||||
|
||||
This example uses Firebase Simple Login to create 'anonymous' user sessions in Firebase,
|
||||
meaning that user credentials are not required, though a user has a valid Firebase
|
||||
authentication token and security rules still apply.
|
||||
|
||||
Requirements: in order to use this example with your own Firebase, you'll need to do the following:
|
||||
1. Apply the security rules at https://github.com/firebase/firechat/blob/master/rules.json
|
||||
2. Enable the 'Anonymous' authentication provider in Forge
|
||||
3. Update the URL below to reference your Firebase
|
||||
4. Update the room id for auto-entry with a public room you have created
|
||||
-->
|
||||
<body>
|
||||
<div id="firechat-wrapper"></div>
|
||||
<script type='text/javascript'>
|
||||
var chatRef = new Firebase('https://firechat-demo.firebaseio.com');
|
||||
var chat = new FirechatUI(chatRef, document.getElementById("firechat-wrapper"));
|
||||
var simpleLogin = new FirebaseSimpleLogin(chatRef, function(err, user) {
|
||||
if (user) {
|
||||
chat.setUser(user.id, 'Anonymous' + user.id.substr(0, 8));
|
||||
setTimeout(function() {
|
||||
chat._chat.enterRoom('-Iy1N3xs4kN8iALHV0QA');
|
||||
}, 500);
|
||||
} else {
|
||||
simpleLogin.login('anonymous');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
33
bower_components/firechat/package.json
vendored
Normal file
33
bower_components/firechat/package.json
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "firechat",
|
||||
"title": "Firechat",
|
||||
"description": "Open source, real-time chat powered by Firebase",
|
||||
"homepage": "http://firebase.github.io/firechat",
|
||||
"author": {
|
||||
"name": "Firebase Inc.",
|
||||
"url": "https://firebase.com"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/firebase/firechat.git"
|
||||
},
|
||||
"bugs": "https://github.com/firebase/firechat/issues",
|
||||
"licenses": [{
|
||||
"type": "MIT",
|
||||
"url": "http://firebase.mit-license.org/"
|
||||
}],
|
||||
"version": "1.0.0",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.0",
|
||||
"grunt-contrib-clean": "~0.4.1",
|
||||
"grunt-contrib-concat": "~0.1.1",
|
||||
"grunt-contrib-jshint": "~0.1.0",
|
||||
"grunt-contrib-jst": "~0.5.0",
|
||||
"grunt-contrib-less": "~0.5.0",
|
||||
"grunt-contrib-uglify": "~0.1.0",
|
||||
"grunt-contrib-watch": "~0.1.4",
|
||||
"grunt-docco": "~0.2.0"
|
||||
},
|
||||
"keywords": ["firebase", "chat", "talk", "real-time", "synchronization", "websocket"]
|
||||
}
|
104
bower_components/firechat/rules.json
vendored
Normal file
104
bower_components/firechat/rules.json
vendored
Normal file
@ -0,0 +1,104 @@
|
||||
{
|
||||
// Firechat sample security rules
|
||||
"rules": {
|
||||
// By default, make all data private unless specified otherwise.
|
||||
".read": false,
|
||||
".write": false,
|
||||
"room-metadata": {
|
||||
".read": true,
|
||||
"$roomId": {
|
||||
// Append-only by anyone, and admins can add official rooms, and edit or remove rooms as well.
|
||||
".write": "(auth != null) && (!data.exists() || root.child('moderators').hasChild(auth.id) || data.child('createdByUserId').val() === auth.id)",
|
||||
".validate": "newData.hasChildren(['name','type'])",
|
||||
"id": {
|
||||
".validate": "(newData.val() === $roomId)"
|
||||
},
|
||||
"createdByUserId": {
|
||||
".validate": "(auth.id === newData.val())"
|
||||
},
|
||||
"numUsers": {
|
||||
".validate": "(newData.isNumber())"
|
||||
},
|
||||
"type": {
|
||||
".validate": "('public' === newData.val()) || 'private' === newData.val() || ('official' === newData.val() && (root.child('moderators').hasChild(auth.id)))"
|
||||
},
|
||||
// A list of users that may read messages from this room.
|
||||
"authorizedUsers": {
|
||||
".write": "(auth != null) && (!data.exists() || root.child('moderators').hasChild(auth.id) || data.hasChild(auth.id))"
|
||||
}
|
||||
}
|
||||
},
|
||||
"room-messages": {
|
||||
"$roomId": {
|
||||
// A list of messages by room, viewable by anyone for public rooms, or authorized users for private rooms.
|
||||
".read": "(root.child('room-metadata').child($roomId).child('type').val() != 'private' || root.child('room-metadata').child($roomId).child('authorizedUsers').hasChild(auth.id))",
|
||||
"$msgId": {
|
||||
// Allow anyone to append to this list and allow admins to edit or remove.
|
||||
".write": "(auth != null) && (data.val() === null || root.child('moderators').hasChild(auth.id)) && (root.child('room-metadata').child($roomId).child('type').val() != 'private' || root.child('room-metadata').child($roomId).child('authorizedUsers').hasChild(auth.id)) && (!root.child('suspensions').hasChild(auth.id) || root.child('suspensions').child(auth.id).val() < now)",
|
||||
".validate": "(newData.hasChildren(['userId','name','message','timestamp']))"
|
||||
}
|
||||
}
|
||||
},
|
||||
"room-users": {
|
||||
"$roomId": {
|
||||
".read": "(root.child('room-metadata').child($roomId).child('type').val() != 'private' || root.child('room-metadata').child($roomId).child('authorizedUsers').hasChild(auth.id))",
|
||||
"$userId": {
|
||||
// A list of users by room, viewable by anyone for public rooms, or authorized users for private rooms.
|
||||
".write": "(auth != null) && ($userId === auth.id || root.child('moderators').hasChild(auth.id))",
|
||||
"$sessionId": {
|
||||
".validate": "(!newData.exists() || newData.hasChildren(['id','name']))"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
// A list of users and their associated metadata, which can be updated by the single user or a moderator.
|
||||
"$userId": {
|
||||
".write": "(auth != null) && (auth.id === $userId || (root.child('moderators').hasChild(auth.id)))",
|
||||
".read": "(auth != null) && (auth.id === $userId || (root.child('moderators').hasChild(auth.id)))",
|
||||
".validate": "($userId === newData.child('id').val())",
|
||||
"invites": {
|
||||
// A list of chat invitations from other users, append-only by anyone.
|
||||
"$inviteId": {
|
||||
// Allow the user who created the invitation to read the status of the invitation.
|
||||
".read": "(auth != null) && (auth.id === data.child('fromUserId').val())",
|
||||
".write": "(auth != null) && (!data.exists() || $userId === auth.id || data.child('fromUserId').val() === auth.id)",
|
||||
".validate": "newData.hasChildren(['fromUserId','fromUserName','roomId']) && (newData.child('id').val() === $inviteId)"
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
// A list of notifications, which can only be appended to by moderators.
|
||||
"$notificationId": {
|
||||
".write": "(auth != null) && (data.val() === null) && (root.child('moderators').hasChild(auth.id))",
|
||||
".validate": "newData.hasChildren(['fromUserId','timestamp','notificationType'])",
|
||||
"fromUserId": {
|
||||
".validate": "newData.val() === auth.id"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"user-names-online": {
|
||||
// A mapping of active, online lowercase usernames to sessions and user ids.
|
||||
".read": true,
|
||||
"$username": {
|
||||
"$sessionId": {
|
||||
".write": "(auth != null) && (!data.exists() || !newData.exists() || data.child('id').val() === auth.id)",
|
||||
"id": {
|
||||
".validate": "(newData.val() === auth.id)"
|
||||
},
|
||||
"name": {
|
||||
".validate": "(newData.isString())"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"moderators": {
|
||||
".read": "(auth != null)"
|
||||
},
|
||||
"suspensions": {
|
||||
".write": "(auth != null) && (root.child('moderators').hasChild(auth.id))",
|
||||
".read": "(auth != null) && (root.child('moderators').hasChild(auth.id))"
|
||||
}
|
||||
}
|
||||
}
|
1152
bower_components/firechat/src/js/firechat-ui.js
vendored
Normal file
1152
bower_components/firechat/src/js/firechat-ui.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
645
bower_components/firechat/src/js/firechat.js
vendored
Normal file
645
bower_components/firechat/src/js/firechat.js
vendored
Normal file
@ -0,0 +1,645 @@
|
||||
// Firechat is a simple, easily-extensible data layer for multi-user,
|
||||
// multi-room chat, built entirely on [Firebase](https://firebase.com).
|
||||
//
|
||||
// The Firechat object is the primary conduit for all underlying data events.
|
||||
// It exposes a number of methods for binding event listeners, creating,
|
||||
// entering, or leaving chat rooms, initiating chats, sending messages,
|
||||
// and moderator actions such as warning, kicking, or suspending users.
|
||||
//
|
||||
// Firechat.js 1.0.0
|
||||
// https://firebase.com
|
||||
// (c) 2014 Firebase
|
||||
// License: MIT
|
||||
|
||||
// Setup
|
||||
// --------------
|
||||
(function(Firebase) {
|
||||
|
||||
// Establish a reference to the `window` object, and save the previous value
|
||||
// of the `Firechat` variable.
|
||||
var root = this,
|
||||
previousFirechat = root.Firechat;
|
||||
|
||||
function Firechat(firebaseRef, options) {
|
||||
|
||||
// Instantiate a new connection to Firebase.
|
||||
this._firebase = firebaseRef;
|
||||
|
||||
// User-specific instance variables.
|
||||
this._user = null;
|
||||
this._userId = null;
|
||||
this._userName = null;
|
||||
this._isModerator = false;
|
||||
|
||||
// A unique id generated for each session.
|
||||
this._sessionId = null;
|
||||
|
||||
// A mapping of event IDs to an array of callbacks.
|
||||
this._events = {};
|
||||
|
||||
// A mapping of room IDs to a boolean indicating presence.
|
||||
this._rooms = {};
|
||||
|
||||
// A mapping of operations to re-queue on disconnect.
|
||||
this._presenceBits = {};
|
||||
|
||||
// Commonly-used Firebase references.
|
||||
this._userRef = null;
|
||||
this._messageRef = this._firebase.child('room-messages');
|
||||
this._roomRef = this._firebase.child('room-metadata');
|
||||
this._privateRoomRef = this._firebase.child('room-private-metadata');
|
||||
this._moderatorsRef = this._firebase.child('moderators');
|
||||
this._suspensionsRef = this._firebase.child('suspensions');
|
||||
this._usersOnlineRef = this._firebase.child('user-names-online');
|
||||
|
||||
// Setup and establish default options.
|
||||
this._options = options || {};
|
||||
|
||||
// The number of historical messages to load per room.
|
||||
this._options.numMaxMessages = this._options.numMaxMessages || 50;
|
||||
}
|
||||
|
||||
// Run Firechat in *noConflict* mode, returning the `Firechat` variable to
|
||||
// its previous owner, and returning a reference to the Firechat object.
|
||||
Firechat.noConflict = function noConflict() {
|
||||
root.Firechat = previousFirechat;
|
||||
return Firechat;
|
||||
};
|
||||
|
||||
// Export the Firechat object as a global.
|
||||
root.Firechat = Firechat;
|
||||
|
||||
// Firechat Internal Methods
|
||||
// --------------
|
||||
Firechat.prototype = {
|
||||
|
||||
// Load the initial metadata for the user's account and set initial state.
|
||||
_loadUserMetadata: function(onComplete) {
|
||||
var self = this;
|
||||
|
||||
// Update the user record with a default name on user's first visit.
|
||||
this._userRef.transaction(function(current) {
|
||||
if (!current || !current.id || !current.name) {
|
||||
return {
|
||||
id: self._userId,
|
||||
name: self._userName
|
||||
};
|
||||
}
|
||||
}, function(error, committed, snapshot) {
|
||||
self._user = snapshot.val();
|
||||
self._moderatorsRef.child(self._userId).once('value', function(snapshot) {
|
||||
self._isModerator = !!snapshot.val();
|
||||
root.setTimeout(onComplete, 0);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
// Initialize Firebase listeners and callbacks for the supported bindings.
|
||||
_setupDataEvents: function() {
|
||||
// Monitor connection state so we can requeue disconnect operations if need be.
|
||||
this._firebase.root().child('.info/connected').on('value', function(snapshot) {
|
||||
if (snapshot.val() === true) {
|
||||
// We're connected (or reconnected)! Set up our presence state.
|
||||
for (var i = 0; i < this._presenceBits; i++) {
|
||||
var op = this._presenceBits[i],
|
||||
ref = this._firebase.root().child(op.ref);
|
||||
|
||||
ref.onDisconnect().set(op.offlineValue);
|
||||
ref.set(op.onlineValue);
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
|
||||
// Generate a unique session id for the visit.
|
||||
var sessionRef = this._userRef.child('sessions').push();
|
||||
this._sessionId = sessionRef.name();
|
||||
this._queuePresenceOperation(sessionRef, true, null);
|
||||
|
||||
// Register our username in the public user listing.
|
||||
var usernameRef = this._usersOnlineRef.child(this._userName.toLowerCase());
|
||||
var usernameSessionRef = usernameRef.child(this._sessionId);
|
||||
this._queuePresenceOperation(usernameSessionRef, {
|
||||
id: this._userId,
|
||||
name: this._userName
|
||||
}, null);
|
||||
|
||||
// Listen for state changes for the given user.
|
||||
this._userRef.on('value', this._onUpdateUser, this);
|
||||
|
||||
// Listen for chat invitations from other users.
|
||||
this._userRef.child('invites').on('child_added', this._onFirechatInvite, this);
|
||||
|
||||
// Listen for messages from moderators and adminstrators.
|
||||
this._userRef.child('notifications').on('child_added', this._onNotification, this);
|
||||
},
|
||||
|
||||
// Append the new callback to our list of event handlers.
|
||||
_addEventCallback: function(eventId, callback) {
|
||||
this._events[eventId] = this._events[eventId] || [];
|
||||
this._events[eventId].push(callback);
|
||||
},
|
||||
|
||||
// Retrieve the list of event handlers for a given event id.
|
||||
_getEventCallbacks: function(eventId) {
|
||||
if (this._events.hasOwnProperty(eventId)) {
|
||||
return this._events[eventId];
|
||||
}
|
||||
return [];
|
||||
},
|
||||
|
||||
// Invoke each of the event handlers for a given event id with specified data.
|
||||
_invokeEventCallbacks: function(eventId) {
|
||||
var args = [],
|
||||
callbacks = this._getEventCallbacks(eventId);
|
||||
|
||||
Array.prototype.push.apply(args, arguments);
|
||||
args = args.slice(1);
|
||||
|
||||
for (var i = 0; i < callbacks.length; i += 1) {
|
||||
callbacks[i].apply(null, args);
|
||||
}
|
||||
},
|
||||
|
||||
// Keep track of on-disconnect events so they can be requeued if we disconnect the reconnect.
|
||||
_queuePresenceOperation: function(ref, onlineValue, offlineValue) {
|
||||
ref.onDisconnect().set(offlineValue);
|
||||
ref.set(onlineValue);
|
||||
this._presenceBits[ref.toString()] = {
|
||||
ref: ref,
|
||||
onlineValue: onlineValue,
|
||||
offlineValue: offlineValue
|
||||
};
|
||||
},
|
||||
|
||||
// Remove an on-disconnect event from firing upon future disconnect and reconnect.
|
||||
_removePresenceOperation: function(path, value) {
|
||||
var ref = new Firebase(path);
|
||||
ref.onDisconnect().cancel();
|
||||
ref.set(value);
|
||||
delete this._presenceBits[path];
|
||||
},
|
||||
|
||||
// Event to monitor current user state.
|
||||
_onUpdateUser: function(snapshot) {
|
||||
this._user = snapshot.val();
|
||||
this._invokeEventCallbacks('user-update', this._user);
|
||||
},
|
||||
|
||||
// Event to monitor current auth + user state.
|
||||
_onAuthRequired: function() {
|
||||
this._invokeEventCallbacks('auth-required');
|
||||
},
|
||||
|
||||
// Events to monitor room entry / exit and messages additional / removal.
|
||||
_onEnterRoom: function(room) {
|
||||
this._invokeEventCallbacks('room-enter', room);
|
||||
},
|
||||
_onNewMessage: function(roomId, snapshot) {
|
||||
var message = snapshot.val();
|
||||
message.id = snapshot.name();
|
||||
this._invokeEventCallbacks('message-add', roomId, message);
|
||||
},
|
||||
_onRemoveMessage: function(roomId, snapshot) {
|
||||
var messageId = snapshot.name();
|
||||
this._invokeEventCallbacks('message-remove', roomId, messageId);
|
||||
},
|
||||
_onLeaveRoom: function(roomId) {
|
||||
this._invokeEventCallbacks('room-exit', roomId);
|
||||
},
|
||||
|
||||
// Event to listen for notifications from administrators and moderators.
|
||||
_onNotification: function(snapshot) {
|
||||
var notification = snapshot.val();
|
||||
if (!notification.read) {
|
||||
if (notification.notificationType !== 'suspension' || notification.data.suspendedUntil < new Date().getTime()) {
|
||||
snapshot.ref().child('read').set(true);
|
||||
}
|
||||
this._invokeEventCallbacks('notification', notification);
|
||||
}
|
||||
},
|
||||
|
||||
// Events to monitor chat invitations and invitation replies.
|
||||
_onFirechatInvite: function(snapshot) {
|
||||
var self = this,
|
||||
invite = snapshot.val();
|
||||
|
||||
// Skip invites we've already responded to.
|
||||
if (invite.status) {
|
||||
return;
|
||||
}
|
||||
|
||||
invite.id = invite.id || snapshot.name();
|
||||
self.getRoom(invite.roomId, function(room) {
|
||||
invite.toRoomName = room.name;
|
||||
self._invokeEventCallbacks('room-invite', invite);
|
||||
});
|
||||
},
|
||||
_onFirechatInviteResponse: function(snapshot) {
|
||||
var self = this,
|
||||
invite = snapshot.val();
|
||||
|
||||
invite.id = invite.id || snapshot.name();
|
||||
this._invokeEventCallbacks('room-invite-response', invite);
|
||||
}
|
||||
};
|
||||
|
||||
// Firechat External Methods
|
||||
// --------------
|
||||
|
||||
// Initialize the library and setup data listeners.
|
||||
Firechat.prototype.setUser = function(userId, userName, callback) {
|
||||
var self = this;
|
||||
|
||||
self._firebase.root().child('.info/authenticated').on('value', function(snapshot) {
|
||||
var authenticated = snapshot.val();
|
||||
if (authenticated) {
|
||||
self._firebase.root().child('.info/authenticated').off();
|
||||
|
||||
self._userId = userId.toString();
|
||||
self._userName = userName.toString();
|
||||
self._userRef = self._firebase.child('users').child(self._userId);
|
||||
self._loadUserMetadata(function() {
|
||||
root.setTimeout(function() {
|
||||
callback(self._user);
|
||||
self._setupDataEvents();
|
||||
}, 0);
|
||||
});
|
||||
} else {
|
||||
self.warn('Firechat requires an authenticated Firebase reference. Pass an authenticated reference before loading.');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Resumes the previous session by automatically entering rooms.
|
||||
Firechat.prototype.resumeSession = function() {
|
||||
this._userRef.child('rooms').once('value', function(snapshot) {
|
||||
var rooms = snapshot.val();
|
||||
for (var roomId in rooms) {
|
||||
this.enterRoom(rooms[roomId].id);
|
||||
}
|
||||
}, /* onError */ function(){}, /* context */ this);
|
||||
};
|
||||
|
||||
// Callback registration. Supports each of the following events:
|
||||
Firechat.prototype.on = function(eventType, cb) {
|
||||
this._addEventCallback(eventType, cb);
|
||||
};
|
||||
|
||||
// Create and automatically enter a new chat room.
|
||||
Firechat.prototype.createRoom = function(roomName, roomType, callback) {
|
||||
var self = this,
|
||||
newRoomRef = this._roomRef.push();
|
||||
|
||||
var newRoom = {
|
||||
id: newRoomRef.name(),
|
||||
name: roomName,
|
||||
type: roomType || 'public',
|
||||
createdByUserId: this._userId,
|
||||
createdAt: Firebase.ServerValue.TIMESTAMP
|
||||
};
|
||||
|
||||
if (roomType === 'private') {
|
||||
newRoom.authorizedUsers = {};
|
||||
newRoom.authorizedUsers[this._userId] = true;
|
||||
}
|
||||
|
||||
newRoomRef.set(newRoom, function(error) {
|
||||
if (!error) {
|
||||
self.enterRoom(newRoomRef.name());
|
||||
}
|
||||
if (callback) {
|
||||
callback(newRoomRef.name());
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Enter a chat room.
|
||||
Firechat.prototype.enterRoom = function(roomId) {
|
||||
var self = this;
|
||||
self.getRoom(roomId, function(room) {
|
||||
var roomName = room.name;
|
||||
|
||||
if (!roomId || !roomName) return;
|
||||
|
||||
// Skip if we're already in this room.
|
||||
if (self._rooms[roomId]) {
|
||||
return;
|
||||
}
|
||||
|
||||
self._rooms[roomId] = true;
|
||||
|
||||
if (self._user) {
|
||||
// Save entering this room to resume the session again later.
|
||||
self._userRef.child('rooms').child(roomId).set({
|
||||
id: roomId,
|
||||
name: roomName,
|
||||
active: true
|
||||
});
|
||||
|
||||
// Set presence bit for the room and queue it for removal on disconnect.
|
||||
var presenceRef = self._firebase.child('room-users').child(roomId).child(self._userId).child(self._sessionId);
|
||||
self._queuePresenceOperation(presenceRef, {
|
||||
id: self._userId,
|
||||
name: self._userName
|
||||
}, null);
|
||||
}
|
||||
|
||||
// Invoke our callbacks before we start listening for new messages.
|
||||
self._onEnterRoom({ id: roomId, name: roomName });
|
||||
|
||||
// Setup message listeners
|
||||
self._roomRef.child(roomId).once('value', function(snapshot) {
|
||||
self._messageRef.child(roomId).limit(self._options.numMaxMessages).on('child_added', function(snapshot) {
|
||||
self._onNewMessage(roomId, snapshot);
|
||||
}, /* onCancel */ function() {
|
||||
// Turns out we don't have permission to access these messages.
|
||||
self.leaveRoom(roomId);
|
||||
}, /* context */ self);
|
||||
|
||||
self._messageRef.child(roomId).limit(self._options.numMaxMessages).on('child_removed', function(snapshot) {
|
||||
self._onRemoveMessage(roomId, snapshot);
|
||||
}, /* onCancel */ function(){}, /* context */ self);
|
||||
}, /* onFailure */ function(){}, self);
|
||||
});
|
||||
};
|
||||
|
||||
// Leave a chat room.
|
||||
Firechat.prototype.leaveRoom = function(roomId) {
|
||||
var self = this,
|
||||
userRoomRef = self._firebase.child('room-users').child(roomId);
|
||||
|
||||
// Remove listener for new messages to this room.
|
||||
self._messageRef.child(roomId).off();
|
||||
|
||||
if (self._user) {
|
||||
var presenceRef = userRoomRef.child(self._userId).child(self._sessionId);
|
||||
|
||||
// Remove presence bit for the room and cancel on-disconnect removal.
|
||||
self._removePresenceOperation(presenceRef.toString(), null);
|
||||
|
||||
// Remove session bit for the room.
|
||||
self._userRef.child('rooms').child(roomId).remove();
|
||||
}
|
||||
|
||||
delete self._rooms[roomId];
|
||||
|
||||
// Invoke event callbacks for the room-exit event.
|
||||
self._onLeaveRoom(roomId);
|
||||
};
|
||||
|
||||
Firechat.prototype.sendMessage = function(roomId, messageContent, messageType, cb) {
|
||||
var self = this,
|
||||
message = {
|
||||
userId: self._userId,
|
||||
name: self._userName,
|
||||
timestamp: Firebase.ServerValue.TIMESTAMP,
|
||||
message: messageContent,
|
||||
type: messageType || 'default'
|
||||
},
|
||||
newMessageRef;
|
||||
|
||||
if (!self._user) {
|
||||
self._onAuthRequired();
|
||||
if (cb) {
|
||||
cb(new Error('Not authenticated or user not set!'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
newMessageRef = self._messageRef.child(roomId).push();
|
||||
newMessageRef.setWithPriority(message, Firebase.ServerValue.TIMESTAMP, cb);
|
||||
};
|
||||
|
||||
Firechat.prototype.deleteMessage = function(roomId, messageId, cb) {
|
||||
var self = this;
|
||||
|
||||
self._messageRef.child(roomId).child(messageId).remove(cb);
|
||||
};
|
||||
|
||||
// Mute or unmute a given user by id. This list will be stored internally and
|
||||
// all messages from the muted clients will be filtered client-side after
|
||||
// receipt of each new message.
|
||||
Firechat.prototype.toggleUserMute = function(userId, cb) {
|
||||
var self = this;
|
||||
|
||||
if (!self._user) {
|
||||
self._onAuthRequired();
|
||||
if (cb) {
|
||||
cb(new Error('Not authenticated or user not set!'));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
self._userRef.child('muted').child(userId).transaction(function(isMuted) {
|
||||
return (isMuted) ? null : true;
|
||||
}, cb);
|
||||
};
|
||||
|
||||
// Send a moderator notification to a specific user.
|
||||
Firechat.prototype.sendSuperuserNotification = function(userId, notificationType, data, cb) {
|
||||
var self = this,
|
||||
userNotificationsRef = self._firebase.child('users').child(userId).child('notifications');
|
||||
|
||||
userNotificationsRef.push({
|
||||
fromUserId: self._userId,
|
||||
timestamp: Firebase.ServerValue.TIMESTAMP,
|
||||
notificationType: notificationType,
|
||||
data: data || {}
|
||||
}, cb);
|
||||
};
|
||||
|
||||
// Warn a user for violating the terms of service or being abusive.
|
||||
Firechat.prototype.warnUser = function(userId) {
|
||||
var self = this;
|
||||
|
||||
self.sendSuperuserNotification(userId, 'warning');
|
||||
};
|
||||
|
||||
// Suspend a user by putting the user into read-only mode for a period.
|
||||
Firechat.prototype.suspendUser = function(userId, timeLengthSeconds, cb) {
|
||||
var self = this,
|
||||
suspendedUntil = new Date().getTime() + 1000*timeLengthSeconds;
|
||||
|
||||
self._suspensionsRef.child(userId).set(suspendedUntil, function(error) {
|
||||
if (error && cb) {
|
||||
return cb(error);
|
||||
} else {
|
||||
self.sendSuperuserNotification(userId, 'suspension', {
|
||||
suspendedUntil: suspendedUntil
|
||||
});
|
||||
return cb(null);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Invite a user to a specific chat room.
|
||||
Firechat.prototype.inviteUser = function(userId, roomId) {
|
||||
var self = this,
|
||||
sendInvite = function() {
|
||||
var inviteRef = self._firebase.child('users').child(userId).child('invites').push();
|
||||
inviteRef.set({
|
||||
id: inviteRef.name(),
|
||||
fromUserId: self._userId,
|
||||
fromUserName: self._userName,
|
||||
roomId: roomId
|
||||
});
|
||||
|
||||
// Handle listen unauth / failure in case we're kicked.
|
||||
inviteRef.on('value', self._onFirechatInviteResponse, function(){}, self);
|
||||
};
|
||||
|
||||
if (!self._user) {
|
||||
self._onAuthRequired();
|
||||
return;
|
||||
}
|
||||
|
||||
self.getRoom(roomId, function(room) {
|
||||
if (room.type === 'private') {
|
||||
var authorizedUserRef = self._roomRef.child(roomId).child('authorizedUsers');
|
||||
authorizedUserRef.child(userId).set(true, function(error) {
|
||||
if (!error) {
|
||||
sendInvite();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
sendInvite();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Firechat.prototype.acceptInvite = function(inviteId, cb) {
|
||||
var self = this;
|
||||
|
||||
self._userRef.child('invites').child(inviteId).once('value', function(snapshot) {
|
||||
var invite = snapshot.val();
|
||||
if (invite === null && cb) {
|
||||
return cb(new Error('acceptInvite(' + inviteId + '): invalid invite id'));
|
||||
} else {
|
||||
self.enterRoom(invite.roomId);
|
||||
self._userRef.child('invites').child(inviteId).update({
|
||||
'status': 'accepted',
|
||||
'toUserName': self._userName
|
||||
}, cb);
|
||||
}
|
||||
}, self);
|
||||
};
|
||||
|
||||
Firechat.prototype.declineInvite = function(inviteId, cb) {
|
||||
var self = this,
|
||||
updates = {
|
||||
'status': 'declined',
|
||||
'toUserName': self._userName
|
||||
};
|
||||
|
||||
self._userRef.child('invites').child(inviteId).update(updates, cb);
|
||||
};
|
||||
|
||||
Firechat.prototype.getRoomList = function(cb) {
|
||||
var self = this;
|
||||
|
||||
self._roomRef.once('value', function(snapshot) {
|
||||
cb(snapshot.val());
|
||||
});
|
||||
};
|
||||
|
||||
Firechat.prototype.getUsersByRoom = function() {
|
||||
var self = this,
|
||||
roomId = arguments[0],
|
||||
query = self._firebase.child('room-users').child(roomId),
|
||||
cb = arguments[arguments.length - 1],
|
||||
limit = null;
|
||||
|
||||
if (arguments.length > 2) {
|
||||
limit = arguments[1];
|
||||
}
|
||||
|
||||
query = (limit) ? query.limit(limit) : query;
|
||||
|
||||
query.once('value', function(snapshot) {
|
||||
var usernames = snapshot.val() || {},
|
||||
usernamesUnique = {};
|
||||
|
||||
for (var username in usernames) {
|
||||
for (var session in usernames[username]) {
|
||||
// Skip all other sessions for this user as we only need one.
|
||||
usernamesUnique[username] = usernames[username][session];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
root.setTimeout(function() {
|
||||
cb(usernamesUnique);
|
||||
}, 0);
|
||||
});
|
||||
};
|
||||
|
||||
Firechat.prototype.getUsersByPrefix = function(prefix, startAt, endAt, limit, cb) {
|
||||
var self = this,
|
||||
query = this._usersOnlineRef,
|
||||
prefixLower = prefix.toLowerCase();
|
||||
|
||||
if (startAt) {
|
||||
query = query.startAt(null, startAt);
|
||||
} else if (endAt) {
|
||||
query = query.endAt(null, endAt);
|
||||
} else {
|
||||
query = (prefixLower) ? query.startAt(null, prefixLower) : query.startAt();
|
||||
}
|
||||
|
||||
query = (limit) ? query.limit(limit) : query;
|
||||
|
||||
query.once('value', function(snapshot) {
|
||||
var usernames = snapshot.val() || {},
|
||||
usernamesFiltered = {};
|
||||
|
||||
for (var userNameKey in usernames) {
|
||||
var sessions = usernames[userNameKey],
|
||||
userName, userId, usernameClean;
|
||||
|
||||
// Grab the user data from the first registered active session.
|
||||
for (var sessionId in sessions) {
|
||||
userName = sessions[sessionId].name;
|
||||
userId = sessions[sessionId].id;
|
||||
|
||||
// Skip all other sessions for this user as we only need one.
|
||||
break;
|
||||
}
|
||||
|
||||
// Filter out any usernames that don't match our prefix and break.
|
||||
if ((prefix.length > 0) && (userName.toLowerCase().indexOf(prefixLower) !== 0))
|
||||
continue;
|
||||
|
||||
usernamesFiltered[userName] = {
|
||||
name: userName,
|
||||
id: userId
|
||||
};
|
||||
}
|
||||
|
||||
root.setTimeout(function() {
|
||||
cb(usernamesFiltered);
|
||||
}, 0);
|
||||
});
|
||||
};
|
||||
|
||||
// Miscellaneous helper methods.
|
||||
Firechat.prototype.getRoom = function(roomId, callback) {
|
||||
this._roomRef.child(roomId).once('value', function(snapshot) {
|
||||
callback(snapshot.val());
|
||||
});
|
||||
};
|
||||
|
||||
Firechat.prototype.userIsModerator = function() {
|
||||
return this._isModerator;
|
||||
};
|
||||
|
||||
Firechat.prototype.warn = function(msg) {
|
||||
if (console) {
|
||||
msg = 'Firechat Warning: ' + msg;
|
||||
if (typeof console.warn === 'function') {
|
||||
console.warn(msg);
|
||||
} else if (typeof console.log === 'function') {
|
||||
console.log(msg);
|
||||
}
|
||||
}
|
||||
};
|
||||
})(Firebase);
|
5
bower_components/firechat/src/js/libs/jquery-1.9.1.min.js
vendored
Normal file
5
bower_components/firechat/src/js/libs/jquery-1.9.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
bower_components/firechat/src/js/libs/underscore-1.4.4.min.js
vendored
Normal file
1
bower_components/firechat/src/js/libs/underscore-1.4.4.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
35
bower_components/firechat/src/js/shims.js
vendored
Normal file
35
bower_components/firechat/src/js/shims.js
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
(function($) {
|
||||
|
||||
// Shim for Function.bind(...) - (Required by IE < 9, FF < 4, SF < 6)
|
||||
if (!Function.prototype.bind) {
|
||||
Function.prototype.bind = function(oThis) {
|
||||
if (typeof this !== "function") {
|
||||
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
||||
}
|
||||
|
||||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||||
fToBind = this,
|
||||
fNOP = function() {},
|
||||
fBound = function() {
|
||||
return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
|
||||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||||
};
|
||||
|
||||
fNOP.prototype = this.prototype;
|
||||
fBound.prototype = new fNOP();
|
||||
return fBound;
|
||||
};
|
||||
}
|
||||
|
||||
// Shim for Object.keys(...) - (Required by IE < 9, FF < 4)
|
||||
Object.keys = Object.keys || function(oObj) {
|
||||
var result = [];
|
||||
for (var name in oObj) {
|
||||
if (oObj.hasOwnProperty(name)) {
|
||||
result.push(name);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
})();
|
711
bower_components/firechat/src/less/styles.less
vendored
Normal file
711
bower_components/firechat/src/less/styles.less
vendored
Normal file
@ -0,0 +1,711 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/* Boilerplate: Reset
|
||||
============================================================ */
|
||||
#firechat {
|
||||
div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:12px;font-family:arial,helvetica,sans-serif;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0}
|
||||
}
|
||||
|
||||
/* Boilerplate: Mixins
|
||||
============================================================ */
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
&:before,
|
||||
&:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
.background-clip(@clip) {
|
||||
-webkit-background-clip: @clip;
|
||||
-moz-background-clip: @clip;
|
||||
background-clip: @clip;
|
||||
}
|
||||
|
||||
.border-radius(@radius) {
|
||||
-webkit-border-radius: @radius;
|
||||
-moz-border-radius: @radius;
|
||||
border-radius: @radius;
|
||||
}
|
||||
|
||||
.border-radii(@topright, @bottomright, @bottomleft, @topleft) {
|
||||
-webkit-border-top-right-radius: @topright;
|
||||
-webkit-border-bottom-right-radius: @bottomright;
|
||||
-webkit-border-bottom-left-radius: @bottomleft;
|
||||
-webkit-border-top-left-radius: @topleft;
|
||||
-moz-border-radius-topright: @topright;
|
||||
-moz-border-radius-bottomright: @bottomright;
|
||||
-moz-border-radius-bottomleft: @bottomleft;
|
||||
-moz-border-radius-topleft: @topleft;
|
||||
border-top-right-radius: @topright;
|
||||
border-bottom-right-radius: @bottomright;
|
||||
border-bottom-left-radius: @bottomleft;
|
||||
border-top-left-radius: @topleft;
|
||||
}
|
||||
|
||||
.box-shadow(@shadow) {
|
||||
-webkit-box-shadow: @shadow;
|
||||
-moz-box-shadow: @shadow;
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
|
||||
.box-sizing(@boxmodel) {
|
||||
-webkit-box-sizing: @boxmodel;
|
||||
-moz-box-sizing: @boxmodel;
|
||||
box-sizing: @boxmodel;
|
||||
}
|
||||
|
||||
.placeholder(@color) {
|
||||
&:-moz-placeholder { color: @color; }
|
||||
&:-ms-input-placeholder { color: @color; }
|
||||
&::-webkit-input-placeholder { color: @color; }
|
||||
}
|
||||
|
||||
.transition(@transition) {
|
||||
-webkit-transition: @transition;
|
||||
-moz-transition: @transition;
|
||||
-o-transition: @transition;
|
||||
transition: @transition;
|
||||
}
|
||||
|
||||
.user-select(@user-select) {
|
||||
-webkit-touch-callout: @user-select;
|
||||
-webkit-user-select: @user-select;
|
||||
-khtml-user-select: @user-select;
|
||||
-moz-user-select: @user-select;
|
||||
-ms-user-select: @user-select;
|
||||
user-select: @user-select;
|
||||
}
|
||||
|
||||
|
||||
/* Boilerplate: Responsive Layout
|
||||
============================================================ */
|
||||
#firechat {
|
||||
.center {
|
||||
float: none !important;
|
||||
margin-left: auto !important;
|
||||
margin-right: auto !important;
|
||||
}
|
||||
.left { float: left !important; }
|
||||
.right { float: right !important; }
|
||||
.alignleft { text-align: left !important; }
|
||||
.alignright { text-align: right !important; }
|
||||
.aligncenter { text-align: center !important; }
|
||||
.hidden { display: none !important; }
|
||||
|
||||
.row { clear: both; }
|
||||
|
||||
.fifth,
|
||||
.fivesixth,
|
||||
.fourfifth,
|
||||
.half,
|
||||
.ninetenth,
|
||||
.quarter,
|
||||
.sevententh,
|
||||
.sixth,
|
||||
.tenth,
|
||||
.third,
|
||||
.threefifth,
|
||||
.threequarter,
|
||||
.threetenth,
|
||||
.twofifth,
|
||||
.twothird,
|
||||
.full {
|
||||
margin-left: 2.127659574468085%;
|
||||
float: left;
|
||||
min-height: 1px;
|
||||
}
|
||||
|
||||
.fifth:first-child,
|
||||
.fivesixth:first-child,
|
||||
.fourfifth:first-child,
|
||||
.half:first-child,
|
||||
.ninetenth:first-child,
|
||||
.quarter:first-child,
|
||||
.sevententh:first-child,
|
||||
.sixth:first-child,
|
||||
.tenth:first-child,
|
||||
.third:first-child,
|
||||
.threefifth:first-child,
|
||||
.threequarter:first-child,
|
||||
.threetenth:first-child,
|
||||
.twofifth:first-child,
|
||||
.twothird:first-child,
|
||||
.full:first-child { margin-left: 0; }
|
||||
|
||||
.tenth { width: 8.08510638297872%; }
|
||||
.sixth { width: 14.893617021276595%; }
|
||||
.fifth { width: 18.297872340425535%; }
|
||||
.quarter { width: 23.404255319148938%; }
|
||||
.threetenth { width: 26.3829787235% }
|
||||
.third { width: 31.914893617021278%; }
|
||||
.twofifth { width: 38.72340425531915%; }
|
||||
.half { width: 48.93617021276596%; }
|
||||
.sevententh { width: 58.7234042555% }
|
||||
.threefifth { width: 59.14893617021278%; }
|
||||
.twothird { width: 65.95744680851064%; }
|
||||
.threequarter { width: 74.46808510638297%; }
|
||||
.ninetenth { width: 74.8936170215% }
|
||||
.fourfifth { width: 79.57446808510639%; }
|
||||
.fivesixth { width: 82.9787234042553%; }
|
||||
.full { width: 100%; }
|
||||
|
||||
.clipped { overflow: hidden; }
|
||||
|
||||
strong { font-weight: bold; }
|
||||
em { font-style: italic; }
|
||||
label { display: block; }
|
||||
a {
|
||||
color: #005580;
|
||||
&:visited,
|
||||
&:hover,
|
||||
&:active {
|
||||
color: #005580;
|
||||
}
|
||||
}
|
||||
p { margin: 10px 0; }
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin: 10px 0;
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
line-height: 20px;
|
||||
color: inherit;
|
||||
}
|
||||
h1, h2, h3 {
|
||||
line-height: 40px;
|
||||
}
|
||||
h1 { font-size: 38.5px; }
|
||||
h2 { font-size: 31.5px; }
|
||||
h3 { font-size: 24.5px; }
|
||||
h4 { font-size: 17.5px; }
|
||||
h5 { font-size: 14px; }
|
||||
h6 { font-size: 11.9px; }
|
||||
small { font-size: 90%; }
|
||||
|
||||
color: #333;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Component: Tabs
|
||||
============================================================ */
|
||||
#firechat {
|
||||
.nav {
|
||||
list-style: none;
|
||||
}
|
||||
.nav > li > a {
|
||||
display: block;
|
||||
background-color: #eeeeee;
|
||||
text-decoration: none;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
}
|
||||
.nav-tabs {
|
||||
border-bottom: 1px solid #ddd;
|
||||
clear: both;
|
||||
}
|
||||
.nav-tabs > li {
|
||||
float: left;
|
||||
margin-bottom: -1px;
|
||||
max-width: 45%;
|
||||
}
|
||||
.nav-tabs > li > a {
|
||||
.border-radii(4px, 0, 0, 4px);
|
||||
padding: 4px 8px;
|
||||
margin-right: 2px;
|
||||
line-height: 20px;
|
||||
border: 1px solid transparent;
|
||||
border-color: #cccccc;
|
||||
}
|
||||
.nav-tabs > .active > a,
|
||||
.nav-tabs > .active > a:hover,
|
||||
.nav-tabs > .active > a:focus {
|
||||
border-bottom-color: transparent;
|
||||
background-color: #ffffff;
|
||||
cursor: default;
|
||||
}
|
||||
.tab-content {
|
||||
overflow: auto;
|
||||
}
|
||||
.tab-content > .tab-pane {
|
||||
display: none;
|
||||
}
|
||||
.tab-content > .active {
|
||||
display: block;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
/* Component: dropdowns
|
||||
============================================================ */
|
||||
#firechat {
|
||||
.caret {
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
vertical-align: top;
|
||||
border-top: 4px solid #000000;
|
||||
border-right: 4px solid transparent;
|
||||
border-left: 4px solid transparent;
|
||||
content: "";
|
||||
margin-top: 8px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
.firechat-dropdown {
|
||||
position: relative;
|
||||
}
|
||||
.firechat-dropdown-toggle {
|
||||
.user-select(none);
|
||||
text-decoration: none;
|
||||
&:focus,
|
||||
&:active {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
}
|
||||
&.btn {
|
||||
padding: 4px 0 0;
|
||||
height: 22px;
|
||||
}
|
||||
}
|
||||
.firechat-dropdown-menu {
|
||||
.clearfix();
|
||||
.border-radii(0, 4px, 4px, 0);
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
float: left;
|
||||
min-width: 98%;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
|
||||
-webkit-background-clip: padding-box;
|
||||
-moz-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
border: 1px solid #ccc;
|
||||
min-width: 98%;
|
||||
padding: 0;
|
||||
margin: -1px 0 0;
|
||||
}
|
||||
.firechat-dropdown-menu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
overflow-y: scroll;
|
||||
max-height: 300px;
|
||||
}
|
||||
.firechat-dropdown-menu ul > li > a {
|
||||
display: block;
|
||||
padding: 1px 1px 1px 3px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.firechat-dropdown-menu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
.firechat-dropdown-menu ul > li > a:hover,
|
||||
.firechat-dropdown-menu ul > li > a:focus,
|
||||
.firechat-dropdown-menu ul > .active > a,
|
||||
.firechat-dropdown-menu ul > .active > a:hover,
|
||||
.firechat-dropdown-menu ul > .active > a:focus {
|
||||
text-decoration: none;
|
||||
color: #000000;
|
||||
background-color: #d9edf7;
|
||||
outline: 0;
|
||||
}
|
||||
.firechat-dropdown-menu ul > .disabled > a,
|
||||
.firechat-dropdown-menu ul > .disabled > a:hover,
|
||||
.firechat-dropdown-menu ul > .disabled > a:focus {
|
||||
color: #999999;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
cursor: default;
|
||||
}
|
||||
.firechat-dropdown-header {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0;
|
||||
background-color: #eeeeee;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
.firechat-dropdown-footer {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
padding: 10px 0px;
|
||||
background-color: #eeeeee;
|
||||
border-top: 1px solid #cccccc;
|
||||
.box-sizing(border-box);
|
||||
}
|
||||
.open {
|
||||
*z-index: 1000;
|
||||
}
|
||||
.open > .firechat-dropdown-menu {
|
||||
display: block;
|
||||
border: 1px solid #cccccc;
|
||||
.border-radii(0, 4px, 4px, 0);
|
||||
}
|
||||
|
||||
.open > .firechat-dropdown-toggle {
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
.border-radii(4px, 0, 0, 4px);
|
||||
}
|
||||
}
|
||||
|
||||
/* Component: Prompts
|
||||
============================================================ */
|
||||
#firechat {
|
||||
.prompt-wrapper {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
}
|
||||
.prompt {
|
||||
position: absolute;
|
||||
z-index: 1001;
|
||||
background-color: #ffffff;
|
||||
.box-shadow(0 5px 10px rgba(0, 0, 0, 0.45));
|
||||
}
|
||||
.prompt-header {
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
.border-radii(4px, 0, 0, 4px);
|
||||
}
|
||||
.prompt-header a.close {
|
||||
opacity: 0.6;
|
||||
font-size: 13px;
|
||||
margin-top: 2px;
|
||||
&:hover {
|
||||
opacity: 0.9;
|
||||
}
|
||||
}
|
||||
.prompt-body {
|
||||
background-color: #ffffff;
|
||||
padding: 4px 8px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-right: 1px solid #cccccc;
|
||||
}
|
||||
.prompt-footer {
|
||||
padding: 4px 8px;
|
||||
background-color: #eeeeee;
|
||||
border: 1px solid #cccccc;
|
||||
.border-radii(0, 4px, 4px, 0);
|
||||
}
|
||||
.prompt-background {
|
||||
background-color: #333333;
|
||||
border: 1px solid #333333;
|
||||
opacity: 0.8;
|
||||
z-index: 1000;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* Component: Buttons
|
||||
============================================================ */
|
||||
|
||||
#firechat .btn {
|
||||
.user-select(none);
|
||||
.border-radius(4px);
|
||||
height: 24px;
|
||||
display: inline-block;
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 0;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
color: #333333;
|
||||
font-size: 12px;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
background-color: #f5f5f5;
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
|
||||
border-color: #e6e6e6 #e6e6e6 #bfbfbf;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
*background-color: #e6e6e6;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
border: 1px solid #cccccc;
|
||||
*border: 0;
|
||||
border-bottom-color: #b3b3b3;
|
||||
*margin-left: .3em;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05);
|
||||
}
|
||||
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus,
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active,
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
color: #333333;
|
||||
background-color: #e6e6e6;
|
||||
*background-color: #d9d9d9;
|
||||
outline: 0;
|
||||
}
|
||||
#firechat .btn:active,
|
||||
#firechat .btn.active {
|
||||
background-color: #cccccc;
|
||||
}
|
||||
#firechat .btn:first-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
#firechat .btn:hover,
|
||||
#firechat .btn:focus {
|
||||
color: #333333;
|
||||
text-decoration: none;
|
||||
background-position: 0 -15px;
|
||||
.transition(background-position 0.1s linear);
|
||||
}
|
||||
#firechat .btn.active,
|
||||
#firechat .btn:active {
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05);
|
||||
}
|
||||
#firechat .btn.disabled,
|
||||
#firechat .btn[disabled] {
|
||||
cursor: default;
|
||||
background-image: none;
|
||||
opacity: 0.65;
|
||||
filter: alpha(opacity=65);
|
||||
}
|
||||
#firechat .btn.disabled:active,
|
||||
#firechat .btn[disabled]:active {
|
||||
.box-shadow(inherit);
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
|
||||
/* Component: Context Menu
|
||||
============================================================ */
|
||||
#firechat {
|
||||
.contextmenu {
|
||||
position: fixed;
|
||||
z-index: 1001;
|
||||
min-width: 150px;
|
||||
border: 1px solid #cccccc;
|
||||
.border-radius(4px);
|
||||
}
|
||||
.contextmenu ul {
|
||||
background-color: #ffffff;
|
||||
list-style: none;
|
||||
}
|
||||
.contextmenu ul > li > a {
|
||||
display: block;
|
||||
padding: 3px 10px;
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
line-height: 20px;
|
||||
color: #333333;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.contextmenu ul > li > a.highlight {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
.contextmenu ul > li > a:hover,
|
||||
.contextmenu ul > li > a:focus {
|
||||
text-decoration: none;
|
||||
color: #ffffff;
|
||||
background-color: #0081c2;
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Custom Styles
|
||||
============================================================ */
|
||||
#firechat {
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
input,
|
||||
textarea {
|
||||
width: 100%;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
padding: 2px 5px;
|
||||
border: 1px solid #cccccc;
|
||||
.placeholder(#aaaaaa);
|
||||
.border-radius(1px);
|
||||
.box-sizing(border-box);
|
||||
}
|
||||
input[disabled],
|
||||
textarea[disabled] {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
input {
|
||||
height: 24px;
|
||||
}
|
||||
textarea {
|
||||
resize: none;
|
||||
height: 40px;
|
||||
}
|
||||
.search-wrapper {
|
||||
.border-radius(15px);
|
||||
border: 1px solid #cccccc;
|
||||
margin: 0 5px;
|
||||
padding: 2px 5px;
|
||||
background: #ffffff;
|
||||
}
|
||||
.search-wrapper > input[type=text] {
|
||||
padding-left: 0px;
|
||||
border: none;
|
||||
&:focus,
|
||||
&:active {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
.chat {
|
||||
overflow: auto;
|
||||
-ms-overflow-x: hidden;
|
||||
overflow-x: hidden;
|
||||
height: 290px;
|
||||
position: relative;
|
||||
margin-bottom: 5px;
|
||||
border: 1px solid #cccccc;
|
||||
border-top: none;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
.chat textarea {
|
||||
overflow: auto;
|
||||
vertical-align: top;
|
||||
}
|
||||
.message {
|
||||
color: #333;
|
||||
padding: 3px 5px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
&.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
}
|
||||
.message .name {
|
||||
font-weight: bold;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
.message.message-self {
|
||||
color: #2675ab;
|
||||
}
|
||||
.message:nth-child(odd) {
|
||||
background-color: #f9f9f9;
|
||||
&.highlighted {
|
||||
background-color: #d9edf7;
|
||||
}
|
||||
&.message-local {
|
||||
background-color: #effafc;
|
||||
}
|
||||
}
|
||||
.message-content {
|
||||
word-wrap: break-word;
|
||||
padding-right: 45px;
|
||||
&.red {
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
.message.message-notification .message-content {
|
||||
font-style: italic;
|
||||
}
|
||||
ul::-webkit-scrollbar {
|
||||
-webkit-appearance: none;
|
||||
width: 7px;
|
||||
}
|
||||
ul::-webkit-scrollbar-thumb {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
|
||||
}
|
||||
#firechat-header {
|
||||
padding: 6px 0 0 0;
|
||||
height: 40px;
|
||||
}
|
||||
#firechat-tabs {
|
||||
height: 435px;
|
||||
}
|
||||
#firechat-tab-list {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#firechat-tab-content {
|
||||
width: 100%;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tab-pane-menu {
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
vertical-align: middle;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
.tab-pane-menu .firechat-dropdown {
|
||||
margin: 5px 0 0 5px;
|
||||
}
|
||||
.tab-pane-menu > .icon {
|
||||
margin: 5px 2px 0;
|
||||
}
|
||||
.icon {
|
||||
display: inline-block;
|
||||
*margin-right: .3em;
|
||||
line-height: 20px;
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
padding: 0;
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAL8AAAANEAYAAACoeGM7AAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAM80lEQVR42t2cZ4xWRRfHZ3dhwbK7CJZYYiOxV+wlUQzCKmBBsWPvYjQiaiyxYUwULLErltgrNpRF4q5iV0BRLFE0diUi7LIq6Pqw74f//rzO4Zm9d+5z9c37ni//3OfemXtm5sypc58q55xzrrpauHSpcOONheedJ9x9d2Hv3sLvvxfefbfw5puFf/5Zvr+8VFUl7Ozs/rkNNxTef79w222F77wjPOoo4ccfF/O+UDvGzTVEf8wH1zU1wlJJePTRwv33Fx57rPDnn/1+wbzzG+IXvrhmPUPzY/kJEc/HzqslK1fLLy8cMUK4667CFVYQ/vqr8PXXhU884f8eL6eXXKJ2wqSd3tDY2KOHc84NGqSRnnCC7tbVCdvbhRMnasWnTdt5Z+eca2pK6797Yh6ef1641lrCPfYQfv21UNwl62qv115b2Nws/PZb4d57C3/7LftalaOQ/C63nPCII4Tsg6228scHffqp8LHHhPfe6/8eu49feEH44YfCq64S/v67cMGC7tuvu65w6FDhllsKkS/0zoQJaZzMmSO+JaEzZmgkY8b88Ydzzs2b19HhnHNffSWJ6tVLM1cq/fKLrjXiUaPUrn9/XZ9yip6rqVmyxDnnnnrKvPbAA4V6TTJxP/zgT4zdyC+9JOzXz++PgceSVSS1tUJtE+c22si/f+21Pj9Wwd54o//8ZpsJd9xR2KtX9+8vmkLzcsABPt9z5wr32af88xiOf4oaGoSHH17M+/LKg203aJDwiy+EVh5DyHzuuWcxfDn31lvOOffMM7Nn6z1SsZ2dn30m/OQT4eefC7/8UvjBB0LaVzav7D873vfeE6LQISvv3Of50P6OJetgWFp5ZeFzz5V/b1bEEd1333x80g+O4mWXCXEQMDB33CG8/XYhBhuDmMZnOn30kZ5/+23nnGtpefNN55wbP96Xl/nzhYsWCdvauEbeQP1Of6US/XRZfDz8Bx8U9uwpPPFE4eOPC/EMVl9dOG6ccORI4Q03CA87LHbA5RcCwgO47TbhokXCYcOERCKQ7GJiMLiPokeQ2QCjRwtvukkY6zHg0V10kXDAAH++EIz77hM++aRwxRWFq64q3H57v9/+/YVPPy2cOFF47rnCNE8kll/Gi4eIAWU9v/vOnz8MA4qjb18hG51+2JiLF+ebX/hA4U+b5t+/7jrhAw8IkQ88WvnPiZzi4Q0eXL6/dEJhawaGDydmk4uEQmhu1kj79tVImb8RI8TZwIG0p78ddnAubOhDhIcPIXd4nnh4OHYYzPXXF7K/ed5GBLb/NLKRFOtMfyCZAiIKns8aSVp9xP4i8nv//Ti+icjgl0iDeUsjpKDSyJYeqqs1A+3taDBpkn79Qi5YW9vf5wXq0YP+1L5U6loAUjpW4WPhQhN00EFC2SXnDj1UiAF44w2hTWnEEqkcCIWJYkShQNbDIIJZZx2h9Xhs/7EpFDwCNs6UKf584tGQsiFCGTJEuMEG/jxBzBe/H3+8cJddhBiAZ58thl/eM2uW8MgjhWyAyy8XojhRUGuuKayvF7Jhf/pJ+O67wltvFU6dGscv78fTgg45RPjII+XbYZA23bT8/Vtu8ecBDy9MpHS0EROFr1B76lQp7r32su20EwYMkGSOG4dq4I0a4fDh9G9TQN0TKR0iB8aD3G+9tRDHDoPPenKf53GYiABiPWm7f046SUgKDs8aQwxlVfiQTVXh0BChxir+kDol5WPv24im+Ahcb6iu9jVnR4euGX9oXsLj7GKYHP68eUI8ANsRA7WKE8sNkUopdvgJsW0QUBbc3oewl6GQs9LUDgr85JOF5OZHjRKyESZNEp55ppBIC7IbxgoSkQzt2OgXX1wMv9RCFBAuG4HgSREKU0vB42Jjo6gxtPvtJ8TzTM91+kQOf731hHj4KHybA0bRK8B1bpNNhAqkE8OH40CKLZ3I4a+0kq6l8JuapPAbGx991Lm/r5s8+aFDlWOdOVMuS0ODNm5bm1RWSwsSrJY2FZVGRFYYYgwt+wO5EpeJ4eaa+zxPexQ+/Wcl+iFCxeBvs43QRujW048lu09Y16KI/m3Ewu8h/VS55w/5b7AGMrbW5lyXImQh8EhtqGBDGOu525QDnm5RhOcBzZ8vfO01IYIaev/Mmf5zpALsfSiv5bYLfeqpQhSUrYHY92GYbD+shx0XKSOKlrFk1xHFTQRon7M1FNtepaOErwsvFBIqkzKKlQ8MDoTnCpFKwyCi2FZbTYhDgydO6gfaaaesnFC0xQcUUQwlBi6VpPCHDJGKmDyZGWMldY2nPmmSP5NEdlkJRYSCZr7FRbiIzTX3eZ72tiiclZjf444rzyd6hkid9+fNCNhxvfJKvn5C/YVy9nZVYw89ZCdfI6TVEuCLCI4Zhp+Ojq6FIAdLFR0PjpQOFpyFsQMidw5ZxRo7ATaEI6fMgFD8FJsxXCgee00qSiWPJNfKaYLp08u/P1YQ4ZfxWgWDAcOjZmMR8G+3nZBTPbwffhYuFJ5zjhCPKi9ZBUzkh8dpBTkk2KSKLr1UiAIJEYYhK2GQIOto4OGj8NdYQ4hck8tnvkmtQSGDHKK6On8nUNtIPHwUvp05SeSwYTI1s2YpJhk5kliO/uP4Qe6IxMnhk9JhXqyCtQ4Oz9Oe/nwzl05EtJbI5fMeTs8QscIP+zwtEuA+csz+fvjhOH5tf6SSoZCjEipeKw5MVj12PemZ9tXVvunt2dOuHE+K06oqvbG2lp2ikS1ZIknv3burO45lXn+9kKItOfzQwhO6jR0r5PiXPaUQmzNHkMllIyhMMBudmgKnjqxnwnSssooQhWpTLOR6UVwc/4ul1lYhx7rwRBF4PBEEwxLFavhkeTmmN2aMEAG3ghdrqHx149z555efx9DGY37vvFNoPcxQe1v0SyObe8cRIYf/4otCPHwUPsVge4yXWgTEumWl9nZtsPp6irbk8OVyTJ5sYyRJdGOjkitJjUP3FyzwNzIOV1ZivdinFG3J4dt5twqW9eJ5nUFKDIB1xNIIh8p6oijUa64RcnyT2SLSJHWXdtqKcdD/BRcIifBiCf44TIGe2WILYaiGhWHFoaFGxnxtvnlWDvwZY/yLF6toy+8LF2rGamrESXK8WRIwe7YcjKYmzdD06Xpi7lzFWqR4/1pYeywMT5ncL4rpiiuE9tgnIRyeozP9ZyVSBNZyskHxpFFUCGroOCf36Zf28MtzRCqxOXPaM24iJxsJQQgOCgyiqM4GJvduKZRbjOWXXH+fPkKKiUQmOnyYRBrwZeeXCIxxQ/mPSfpEkZn3KZO+7PHiH38U2mKurQHY478ooHSSaZswgWOZum5uFra2iqPOTs0g93EE4NzWAKZM4RioIoDx4/PNE4YQxWNTs6HUgL1Pe3sMNCuF9qOVG2penIPHYOHokcJ8+WVhS4sQR4NaJP3F7luI9tSALBFxovhBW6uonFSORm7mzMEAzJjhnHMNDdLI9fXgq68651xdnZLYffpY+cpIhLzkUNNySd98I7QKFPs0cGC+4dv3sCAYIE4bhXJboWvwrruExxwjJPWStyjD8/b0AyEiCt4Wh6xBpCi+225CG5kUdWogxC/HMyldshGJ7IhcWIfTTxciLxhWqKgcJxuPc/h2nTAAaYrq4IP9dni01jCEiVM3nIdWdaizUxuTDdvaSgQQ6kfPNTVhKPgOgP7j5id0Dh9DbR05Unlch54PfQeQRuyrUM7ZOoxkCq6+WkikhiOBIQ/JEx7sGWfE8QlZOYKyOi7sS+uQgdn3ra/4LT/ZSS1razEEfBgoOf0rdRUaIB4rXyCedpqQFAu5KzxdPyBJPPRlj7d1Tw89JLznHiGeb+hDFVIWIQPll9SS3ynKUUwj5RWbI6Q/inWVEgJsUxRFKdKi+T3rLKEtshf9IZytPdgIgNM75PA5dWQ9fBAFE0+cu+dDGQyAHwGMHi0P/sordT12LB4+Ct//0Cbvh1zWINr9gAePIYe4thGCbU//sYRHn/fDLBwyawhDOfe8ESbvCx3/zHuKJp5Cil8cVlVlxcjXhv5yICvh4aPwreDlJY5nUay1Cj2rINn2lD4qPX6KwcPzRQHhKeP5WeQ+ng2nSyhCcv4fKip1EuIXRQlfXIMUn7nPl9SkhKhFFM2v7QcDEIoAQoiHbxV+5V/uEgGQAuJLXRQ7X/KS0sHD///8cpcIl/P69MN3GDh2RBzUvvjLFVI2NuK1einty+CsZDMY/z0qyuOvkGwIY8+zMuE2ZYGHj8JHUWQlm/sm1ENRZ81dWrShLEVAy1/20F9EEZrTQnk9HJCNYL+YLMrD+F/jF7IbnBQQNQDOi/MFJ9fk8O26xisMQmb7OykaagD+p/RLl3JNDj+U0gn13z0xLhQ0BtEqfLtP7TXP057+YvcDCpvDInwvYInUcnIqqjLKK2/IydlnF8NHfvq3FP9/ANgTCJ9z9ZF7AAAAAElFTkSuQmCC) no-repeat top left;
|
||||
opacity: 0.3;
|
||||
font-size: 22px;
|
||||
font-family: Arial;
|
||||
font-weight: bold;
|
||||
overflow: hidden;
|
||||
&.plus {
|
||||
margin-top: 0;
|
||||
vertical-align: top;
|
||||
background: transparent;
|
||||
}
|
||||
&.search {
|
||||
background-position: 0 0; width: 13px; height: 13px;
|
||||
}
|
||||
&.close {
|
||||
background-position: -120px 0; width: 13px; height: 13px;
|
||||
}
|
||||
&.user-chat {
|
||||
background-position: -138px 0; width: 17px; height: 13px;
|
||||
}
|
||||
&.user-group {
|
||||
background-position: -18px 0; width: 17px; height: 13px;
|
||||
}
|
||||
&.user-mute {
|
||||
background-position: -84px 0; width: 13px; height: 13px;
|
||||
&.red {
|
||||
background-position: -102px 0; width: 13px; height: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.icon:hover,
|
||||
.btn:hover > .icon {
|
||||
opacity: 0.6;
|
||||
}
|
||||
a > .icon {
|
||||
margin: 3px 1px;
|
||||
}
|
||||
}
|
57
bower_components/firechat/templates/layout-full.html
vendored
Normal file
57
bower_components/firechat/templates/layout-full.html
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
<div id='firechat' class='full'>
|
||||
<div id='firechat-header' class='clearfix'>
|
||||
<div class='clearfix'>
|
||||
|
||||
<div class='half firechat-dropdown' style=''>
|
||||
<a id='firechat-btn-rooms' class='firechat-dropdown-toggle btn full' data-toggle="firechat-dropdown" href='#'>
|
||||
<span class='icon user-chat'></span>
|
||||
Chat Rooms
|
||||
<span class='caret'></span>
|
||||
</a>
|
||||
<div class='firechat-dropdown-menu full' role='menu'>
|
||||
|
||||
<ul id='firechat-room-list'></ul>
|
||||
|
||||
<div class='firechat-dropdown-footer aligncenter'>
|
||||
<button type='button' class='btn twothird center' id='firechat-btn-create-room-prompt'>Create Room</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class='half firechat-dropdown' style=''>
|
||||
<a data-event='firechat-user-search-btn' class='btn full firechat-dropdown-toggle' data-toggle="firechat-dropdown" href='#'>
|
||||
<span class='icon user-group'></span>
|
||||
Visitors
|
||||
<span class='caret'></span>
|
||||
</a>
|
||||
<div class='firechat-dropdown-menu' role='menu'>
|
||||
<div class='firechat-dropdown-header aligncenter clearfix'>
|
||||
<div class='search-wrapper'>
|
||||
<span class='icon search'></span>
|
||||
<input type='text' data-event='firechat-user-search' data-template='templates/user-search-list-item.html' data-target='firechat-user-search' data-controls='firechat-user-search-controls' class='center fivesixth'>
|
||||
</div>
|
||||
</div>
|
||||
<ul id='firechat-user-search'></ul>
|
||||
|
||||
<div class='firechat-dropdown-footer aligncenter clearfix'>
|
||||
<div id='firechat-user-search-controls' class='clearfix'>
|
||||
<span class="quarter"></span>
|
||||
<button type='button' class='btn half' data-event='firechat-user-search' data-toggle='firechat-pagination-next' data-template='templates/user-search-list-item.html' data-target='firechat-user-search' data-controls='firechat-user-search-controls' disabled=disabled>Next</button>
|
||||
</div>
|
||||
|
||||
<label class='center full'>
|
||||
<small>Use "+ Invite" button within chat rooms for regular invites.</small>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id='firechat-tabs' class='clearfix'>
|
||||
<ul id='firechat-tab-list' class='nav nav-tabs clearfix'></ul>
|
||||
<div id='firechat-tab-content' class='tab-content'></div>
|
||||
</div>
|
||||
|
||||
<div id='firechat-footer' class='clearfix'></div>
|
||||
</div>
|
6
bower_components/firechat/templates/layout-popout.html
vendored
Normal file
6
bower_components/firechat/templates/layout-popout.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<div id='firechat' class='full'>
|
||||
<div id='firechat-tabs' class='clearfix'>
|
||||
<ul id='firechat-tab-list' class='nav nav-tabs clearfix'></ul>
|
||||
<div id='firechat-tab-content' class='tab-content'></div>
|
||||
</div>
|
||||
</div>
|
11
bower_components/firechat/templates/message-context-menu.html
vendored
Normal file
11
bower_components/firechat/templates/message-context-menu.html
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
<div data-toggle='firechat-contextmenu' class='contextmenu' data-message-id='<%- id %>'>
|
||||
<ul>
|
||||
<li><a href='#!' data-event='firechat-user-warn'>Warn User</a></li>
|
||||
<% if (allowKick) { %>
|
||||
<li><a href='#!' data-event='firechat-user-kick'>Kick User</a></li>
|
||||
<% } %>
|
||||
<li><a href='#!' data-event='firechat-user-suspend-hour'>Suspend User (1 Hour)</a></li>
|
||||
<li><a href='#!' data-event='firechat-user-suspend-day'>Suspend User (1 Day)</a></li>
|
||||
<li><a href='#!' data-event='firechat-message-delete'>Delete Message</a></li>
|
||||
</ul>
|
||||
</div>
|
19
bower_components/firechat/templates/message.html
vendored
Normal file
19
bower_components/firechat/templates/message.html
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<div class='message message-<%- type %> <% if (isSelfMessage) { %> message-self <% } %>' data-message-id='<%- id %>' data-user-id='<%- userId %>' data-user-name='<%- name %>' data-class="firechat-message">
|
||||
<div class='clearfix'>
|
||||
<label class='fourfifth'>
|
||||
<strong class='name' title='<%- name %>'><%- name %></strong>
|
||||
<em>(<%- localtime %>)</em>:
|
||||
</label>
|
||||
|
||||
<% if (!disableActions) { %>
|
||||
<label class='fifth alignright'>
|
||||
<a href='#!' data-event='firechat-user-chat' class='icon user-chat' title='Invite to Private Chat'> </a>
|
||||
<a href='#!' data-event='firechat-user-mute-toggle' class='icon user-mute' title='Mute User'> </a>
|
||||
</label>
|
||||
<% } %>
|
||||
|
||||
</div>
|
||||
<div class='clearfix message-content'>
|
||||
<%= message %>
|
||||
</div>
|
||||
</div>
|
6
bower_components/firechat/templates/prompt-alert.html
vendored
Normal file
6
bower_components/firechat/templates/prompt-alert.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<div class='aligncenter clearfix'>
|
||||
<h6><%- message %></h6>
|
||||
<p class='clearfix'>
|
||||
<button type='button' class='btn quarter right close'>Close</button>
|
||||
</p>
|
||||
</div>
|
4
bower_components/firechat/templates/prompt-create-room.html
vendored
Normal file
4
bower_components/firechat/templates/prompt-create-room.html
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<div class='clearfix'>
|
||||
<h6>Give your chat room a name:</h6>
|
||||
<input data-input='firechat-room-name' type='text' placeholder='Room name...' style='margin-bottom: 5px;' maxlength='<%- maxLengthRoomName %>'>
|
||||
</div>
|
9
bower_components/firechat/templates/prompt-invitation.html
vendored
Normal file
9
bower_components/firechat/templates/prompt-invitation.html
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<div class='aligncenter clearfix'>
|
||||
<h5><%- fromUserName %></h5>
|
||||
<p>invited you to join</p>
|
||||
<h5><%- toRoomName %></h5>
|
||||
<p class='clearfix'>
|
||||
<button data-toggle='accept' type='button' class='btn'>Accept</button>
|
||||
<button data-toggle='decline' type='button' class='btn'>Decline</button>
|
||||
</p>
|
||||
</div>
|
7
bower_components/firechat/templates/prompt-invite-private.html
vendored
Normal file
7
bower_components/firechat/templates/prompt-invite-private.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<div class='aligncenter clearfix'>
|
||||
<h6>Invite <strong><%- userName %></strong> to <%- roomName %>?</h6>
|
||||
<p class='clearfix'>
|
||||
<button data-toggle='accept' type='button' class='btn'>Invite</button>
|
||||
<button data-toggle='decline' type='button' class='close btn'>Cancel</button>
|
||||
</p>
|
||||
</div>
|
6
bower_components/firechat/templates/prompt-invite-reply.html
vendored
Normal file
6
bower_components/firechat/templates/prompt-invite-reply.html
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
<div class='aligncenter clearfix'>
|
||||
<h5><%- toUserName %></h5>
|
||||
<p>
|
||||
<% if (status === 'accepted') { %> accepted your invite. <% } else { %> declined your invite. <% } %>
|
||||
</p>
|
||||
</div>
|
7
bower_components/firechat/templates/prompt-user-mute.html
vendored
Normal file
7
bower_components/firechat/templates/prompt-user-mute.html
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<div class='aligncenter clearfix'>
|
||||
<h5><%- userName %></h5>
|
||||
<p class='clearfix'>
|
||||
<button data-toggle='accept' type='button' class='btn'>Mute</button>
|
||||
<button data-toggle='decline' type='button' class='btn'>Cancel</button>
|
||||
</p>
|
||||
</div>
|
10
bower_components/firechat/templates/prompt.html
vendored
Normal file
10
bower_components/firechat/templates/prompt.html
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<div class='prompt hidden'>
|
||||
<div class='prompt-header'>
|
||||
<%- title %>
|
||||
<a href='#!' class='close right'>X</a>
|
||||
</div>
|
||||
<div class='prompt-body clearfix'>
|
||||
<%= content %>
|
||||
</div>
|
||||
<div class='prompt-footer'></div>
|
||||
</div>
|
5
bower_components/firechat/templates/room-list-item.html
vendored
Normal file
5
bower_components/firechat/templates/room-list-item.html
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<li data-room-type='<%- type %>' data-room-id='<%- id %>' data-room-name='<%- name %>'>
|
||||
<a href='#!' class='clearfix <% if (isRoomOpen) { %> highlight <% } %>'>
|
||||
<span class='left' title='<%- name %>'><%- name %></span>
|
||||
</a>
|
||||
</li>
|
10
bower_components/firechat/templates/room-user-list-item.html
vendored
Normal file
10
bower_components/firechat/templates/room-user-list-item.html
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<li data-user-id='<%- id %>' data-user-name='<%- name %>'>
|
||||
<a href='#!' class='clearfix'>
|
||||
<span class='left twothird clipped' title='<%- name %>'><%- name %></span>
|
||||
|
||||
<% if (!disableActions) { %>
|
||||
<span data-event='firechat-user-mute-toggle' class='icon user-mute right <% if (isMuted) { %> red <% } %>' title='Toggle User Mute'> </span>
|
||||
<span data-event='firechat-user-chat' class='icon user-chat right' title='Invite to Private Chat'> </span>
|
||||
<% } %>
|
||||
</a>
|
||||
</li>
|
10
bower_components/firechat/templates/room-user-search-list-item.html
vendored
Normal file
10
bower_components/firechat/templates/room-user-search-list-item.html
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<li data-user-id='<%- id %>' data-user-name='<%- name %>'>
|
||||
<a href='#!' class='clearfix'>
|
||||
<% if (disableActions) { %>
|
||||
<span class='left fourfifth clipped' title='<%- name %>'><%- name %></span>
|
||||
<% } else { %>
|
||||
<span data-event='firechat-user-invite' class='left fourfifth clipped' title='<%- name %>'><%- name %></span>
|
||||
<span data-event='firechat-user-invite' class='icon plus right' title='Invite to Room'>+</span>
|
||||
<% } %>
|
||||
</a>
|
||||
</li>
|
56
bower_components/firechat/templates/tab-content.html
vendored
Normal file
56
bower_components/firechat/templates/tab-content.html
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
<div id='<%- id %>' data-room-id='<%- id %>' class='tab-pane'>
|
||||
<div class='tab-pane-menu clearfix'>
|
||||
|
||||
<div class='firechat-dropdown twofifth'>
|
||||
<a data-event='firechat-user-room-list-btn' class='full btn firechat-dropdown-toggle' data-toggle="firechat-dropdown" href='#' data-target='firechat-room-user-list-<%- id %>'>
|
||||
<span class='icon user-group'></span>
|
||||
In Room
|
||||
<span class='caret'></span>
|
||||
</a>
|
||||
<div class='firechat-dropdown-menu' role='menu'>
|
||||
<ul id='firechat-room-user-list-<%- id %>' class='full'></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='firechat-dropdown twofifth'>
|
||||
<a data-event='firechat-user-search-btn' class='full btn firechat-dropdown-toggle' data-toggle="firechat-dropdown" href='#'>
|
||||
<span class='icon plus'>+</span>
|
||||
Invite
|
||||
<span class='caret'></span>
|
||||
</a>
|
||||
|
||||
<div class='firechat-dropdown-menu' role='menu'>
|
||||
<div class='firechat-dropdown-header aligncenter clearfix'>
|
||||
<div class='search-wrapper'>
|
||||
<span class='icon search'></span>
|
||||
<input type='text' data-event='firechat-user-search' data-template='templates/room-user-search-list-item.html' data-target='firechat-room-user-search-<%- id %>' data-controls='firechat-room-user-search-controls-<%- id %>' class='center fivesixth'>
|
||||
</div>
|
||||
</div>
|
||||
<ul id='firechat-room-user-search-<%- id %>'></ul>
|
||||
|
||||
<div class='firechat-dropdown-footer aligncenter clearfix'>
|
||||
<div id='firechat-room-user-search-controls-<%- id %>' class='clearfix'>
|
||||
|
||||
<span class="quarter"></span>
|
||||
<!--
|
||||
<button type='button' class='btn third disabled' data-event='firechat-user-search' data-template='templates/room-user-search-list-item.html' data-target='firechat-room-user-search-<%- id %>' data-controls='firechat-room-user-search-controls-<%- id %>' data-toggle='firechat-pagination-prev' disabled=disabled>Prev</button>
|
||||
-->
|
||||
<button type='button' class='btn half disabled' data-event='firechat-user-search' data-template='templates/room-user-search-list-item.html' data-target='firechat-room-user-search-<%- id %>' data-controls='firechat-room-user-search-controls-<%- id %>' data-toggle='firechat-pagination-next' disabled=disabled>Next</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a href='#!' data-event='firechat-close-tab' class='icon close right' style='15px 5px' title='Leave Room'></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class='clearfix'>
|
||||
<div id='firechat-messages<%- id %>' class='chat'></div>
|
||||
</div>
|
||||
|
||||
<div class='clearfix'>
|
||||
<label>Your message:</label>
|
||||
<textarea id='textarea<%- id %>' placeholder='Type your message here...'></textarea>
|
||||
</div>
|
||||
</div>
|
3
bower_components/firechat/templates/tab-menu-item.html
vendored
Normal file
3
bower_components/firechat/templates/tab-menu-item.html
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
<li data-room-id='<%- id %>'>
|
||||
<a href='#<%- id %>' data-toggle='firechat-tab' title='<%- name %>'><%- name %></a>
|
||||
</li>
|
10
bower_components/firechat/templates/user-search-list-item.html
vendored
Normal file
10
bower_components/firechat/templates/user-search-list-item.html
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<li data-user-id='<%- id %>' data-user-name='<%- name %>'>
|
||||
<a href='#!' class='clearfix'>
|
||||
<% if (disableActions) { %>
|
||||
<span class='left fivesixth clipped' title='<%- name %>'><%- name %></span>
|
||||
<% } else { %>
|
||||
<span data-event='firechat-user-chat' class='left fivesixth clipped' title='<%- name %>'><%- name %></span>
|
||||
<span data-event='firechat-user-chat' class='icon user-chat right' title='Invite to Private Chat'> </span>
|
||||
<% } %>
|
||||
</a>
|
||||
</li>
|
58
bower_components/firepad/.bower.json
vendored
Normal file
58
bower_components/firepad/.bower.json
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
{
|
||||
"name": "firepad",
|
||||
"description": "Collaborative text editing powered by Firebase",
|
||||
"version": "1.0.0",
|
||||
"authors": [
|
||||
"Firebase <support@firebase.com> (https://www.firebase.com/)",
|
||||
"Michael Lehenbauer <michael@firebase.com>"
|
||||
],
|
||||
"homepage": "http://www.firepad.io",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/firepad.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"text",
|
||||
"word",
|
||||
"editor",
|
||||
"firebase",
|
||||
"realtime",
|
||||
"collaborative"
|
||||
],
|
||||
"main": [
|
||||
"dist/firepad.min.js",
|
||||
"dist/firepad.css",
|
||||
"dist/firepad.eot"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"lib",
|
||||
"font",
|
||||
"test",
|
||||
"examples",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"Gruntfile.js",
|
||||
"package.json",
|
||||
"changelog.txt"
|
||||
],
|
||||
"dependencies": {
|
||||
"jsdom": "0.10.x",
|
||||
"firebase": "1.0.x"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jasmine": "1.3.1",
|
||||
"codemirror": "3.x.x"
|
||||
},
|
||||
"_release": "1.0.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.0",
|
||||
"commit": "452841ef3f04c15efd8e4a6c57e364cc6734fb8f"
|
||||
},
|
||||
"_source": "git://github.com/firebase/firepad.git",
|
||||
"_target": "~1.0.0",
|
||||
"_originalSource": "firepad",
|
||||
"_direct": true
|
||||
}
|
22
bower_components/firepad/LICENSE
vendored
Normal file
22
bower_components/firepad/LICENSE
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
Copyright 2014 Firebase, https://www.firebase.com/
|
||||
|
||||
Significant parts of the OT system are borrowed from the MIT-licensed ot.js
|
||||
(Copyright © 2012-2013 Tim Baumann, http://timbaumann.info)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the “Software”), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
58
bower_components/firepad/README.md
vendored
Normal file
58
bower_components/firepad/README.md
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
# Firepad
|
||||
|
||||
[](https://travis-ci.org/firebase/firepad)
|
||||
[](http://badge.fury.io/gh/firebase%2Ffirepad)
|
||||
|
||||
[Firepad](http://www.firepad.io/) is an open-source, collaborative code and text editor. It was
|
||||
designed to be embedded inside larger applications. Since it uses
|
||||
[Firebase](https://www.firebase.com/?utm_source=firepad) as a backend, it requires no server-side
|
||||
code and can be added to any web app simply by including a couple JavaScript files.
|
||||
|
||||
Visit [firepad.io](http://www.firepad.io/) for a demo as well as instructions on how to embed it
|
||||
into your application!
|
||||
|
||||
Join our [Firepad Google Group](https://groups.google.com/forum/#!forum/firepad-io) to ask
|
||||
questions, request features, or share your Firepad apps with the community.
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
If you'd like to contribute to Firepad, you'll need to run the following commands to get your
|
||||
environment set up:
|
||||
|
||||
```bash
|
||||
$ git clone https://github.com/firebase/firepad.git
|
||||
$ cd firepad # go to the geofire directory
|
||||
$ npm install -g grunt-cli # globally install grunt task runner
|
||||
$ npm install -g bower # globally install Bower package manager
|
||||
$ npm install # install local npm build / test dependencies
|
||||
$ bower install # install local JavaScript dependencies
|
||||
$ grunt watch # watch for source file changes
|
||||
```
|
||||
|
||||
`grunt watch` will watch for changes in the `/lib/` directory and lint, concatenate, and minify the
|
||||
source files when a change occurs. The output files are written to the `/dist/` directory.
|
||||
|
||||
You can run the test suite by navigating to `file:///path/to/firepad/tests/index.html` or via the
|
||||
command line using `grunt test`.
|
||||
|
||||
|
||||
## Source Code Overview
|
||||
|
||||
To get started, here are some highlights of the directory structure and notable source files:
|
||||
|
||||
* `dist/` - output directory for all files generated by grunt (`firepad.js`, `firepad.min.js`, `firepad.css`, `firepad.eot`).
|
||||
* `examples/` - examples of embedding Firepad.
|
||||
* `font/` - icon font used for rich text toolbar.
|
||||
* `lib/`
|
||||
* `firepad.js` - Entry point for Firepad.
|
||||
* `text-operation.js`, `client.js` - Heart of the Operation Transformation implementation. Based on
|
||||
[ot.js](https://github.com/Operational-Transformation/ot.js/) but extended to allow arbitrary
|
||||
attributes on text (for representing rich-text).
|
||||
* `annotation-list.js` - A data model for representing annotations on text (i.e. spans of text with a particular
|
||||
set of attributes).
|
||||
* `rich-text-codemirror.js` - Uses `AnnotationList` to track annotations on the text and maintain the appropriate
|
||||
set of markers on a CodeMirror instance.
|
||||
* `firebase-adapter.js` - Handles integration with Firebase (appending operations, triggering retries,
|
||||
presence, etc.).
|
||||
* `test/` - Jasmine tests for Firepad (many of these were borrowed from ot.js).
|
48
bower_components/firepad/bower.json
vendored
Normal file
48
bower_components/firepad/bower.json
vendored
Normal file
@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "firepad",
|
||||
"description": "Collaborative text editing powered by Firebase",
|
||||
"version": "1.0.0",
|
||||
"authors": [
|
||||
"Firebase <support@firebase.com> (https://www.firebase.com/)",
|
||||
"Michael Lehenbauer <michael@firebase.com>"
|
||||
],
|
||||
"homepage": "http://www.firepad.io",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/firebase/firepad.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"text",
|
||||
"word",
|
||||
"editor",
|
||||
"firebase",
|
||||
"realtime",
|
||||
"collaborative"
|
||||
],
|
||||
"main": [
|
||||
"dist/firepad.min.js",
|
||||
"dist/firepad.css",
|
||||
"dist/firepad.eot"
|
||||
],
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"lib",
|
||||
"font",
|
||||
"test",
|
||||
"examples",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"Gruntfile.js",
|
||||
"package.json",
|
||||
"changelog.txt"
|
||||
],
|
||||
"dependencies": {
|
||||
"jsdom": "0.10.x",
|
||||
"firebase": "1.0.x"
|
||||
},
|
||||
"devDependencies": {
|
||||
"jasmine": "1.3.1",
|
||||
"codemirror": "3.x.x"
|
||||
}
|
||||
}
|
351
bower_components/firepad/dist/firepad.css
vendored
Normal file
351
bower_components/firepad/dist/firepad.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
bower_components/firepad/dist/firepad.eot
vendored
Normal file
BIN
bower_components/firepad/dist/firepad.eot
vendored
Normal file
Binary file not shown.
5782
bower_components/firepad/dist/firepad.js
vendored
Normal file
5782
bower_components/firepad/dist/firepad.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
15
bower_components/firepad/dist/firepad.min.js
vendored
Normal file
15
bower_components/firepad/dist/firepad.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
14
bower_components/jsdom/.bower.json
vendored
Normal file
14
bower_components/jsdom/.bower.json
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "jsdom",
|
||||
"homepage": "https://github.com/tmpvar/jsdom",
|
||||
"version": "0.10.6",
|
||||
"_release": "0.10.6",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "0.10.6",
|
||||
"commit": "e27bca5eb8ffd51fb50dc24157d0a8421fb08040"
|
||||
},
|
||||
"_source": "git://github.com/tmpvar/jsdom.git",
|
||||
"_target": "0.10.x",
|
||||
"_originalSource": "jsdom"
|
||||
}
|
6
bower_components/jsdom/.gitignore
vendored
Normal file
6
bower_components/jsdom/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
.DS_Store
|
||||
.svn
|
||||
.*.swp
|
||||
gmon.out
|
||||
v8.log
|
||||
node_modules
|
14
bower_components/jsdom/.npmignore
vendored
Normal file
14
bower_components/jsdom/.npmignore
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
benchmark/
|
||||
example/
|
||||
test/
|
||||
Changelog.md
|
||||
status.json
|
||||
Contributing.md
|
||||
|
||||
.npmignore
|
||||
.DS_Store
|
||||
.svn
|
||||
.travis.yml
|
||||
.*.swp
|
||||
**gmon.out
|
||||
**v8.log
|
4
bower_components/jsdom/.travis.yml
vendored
Normal file
4
bower_components/jsdom/.travis.yml
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.8"
|
||||
- "0.10"
|
433
bower_components/jsdom/Changelog.md
vendored
Normal file
433
bower_components/jsdom/Changelog.md
vendored
Normal file
@ -0,0 +1,433 @@
|
||||
## 0.10.6
|
||||
|
||||
* Add: remaining URL properties to `window.location` and `HTMLAnchorElement`.
|
||||
* Fix: the presence of `String.prototype.normalize`, which is available by default in Node 0.11.13 onwards, caused reflected attributes to break. (brock8503)
|
||||
* Fix: iframes now correctly load `about:blank` when the `src` attribute is empty or missing. (mcmathja)
|
||||
* Fix: documents containing only whitespace now correctly generate wrapper documents, just like blank documents do. (nikolas)
|
||||
* Tweak: lazy-load the request module, to improve overall jsdom loading time. (tantaman)
|
||||
|
||||
## 0.10.5
|
||||
|
||||
* Fix: the list of void elements has been updated to match the latest HTML spec.
|
||||
* Fix: when serializing void elements, don't include a ` /`: i.e. the result is now `<br>` instead of `<br />`.
|
||||
|
||||
## 0.10.4
|
||||
|
||||
* Fix: another case was found where jQuery 1.11's `show()` method would cause errors.
|
||||
* Add: `querySelector` and `querySelectorAll` methods to `DocumentFragment`s. (Joris-van-der-Wel)
|
||||
|
||||
## 0.10.3
|
||||
|
||||
* Fix: various defaults on `HTMLAnchorElement` and `window.location` should not be `null`; they should usually be the empty string.
|
||||
|
||||
## 0.10.2
|
||||
|
||||
* Fix: Using jQuery 1.11's `show()` method would cause an error to be thrown.
|
||||
* Fix: `window.location` properties were not updating correctly after using `pushState` or `replaceState`. (toomanydaves)
|
||||
|
||||
## 0.10.1
|
||||
|
||||
* Fix: `window.location.port` should default to `""`, not `null`. (bpeacock)
|
||||
|
||||
## 0.10.0
|
||||
|
||||
* Add: a more complete `document.cookie` implementation, that supports multiple cookies. Note that options like `path`, `max-age`, etc. are still ignored. (dai-shi)
|
||||
|
||||
## 0.9.0
|
||||
|
||||
* Add: implement attribute ordering semantics from WHATWG DOM spec, and in general overhaul attribute storage implementation to be much more awesome and accurate. (lddubeau)
|
||||
* Add: `port` and `protocol` to `HTMLAnchorElement`. (sporchia)
|
||||
* Fix: make `HTMLInputElement` not have a `type` *attribute* by default. It still has a default value for the `type` *property*, viz. `"text"`. (aredridel)
|
||||
* Fix: treat empty namespace URI as meaning "no namespace" with the `getAttributeNS`, `hasAttributeNS`, and `setAttributeNS` functions. (lddubeau)
|
||||
* Fix: reference typed arrays in a way that doesn't immediately break on Node 0.6. Node 0.6 isn't supported in general, though. (kangax)
|
||||
|
||||
## 0.8.11
|
||||
|
||||
* Add: store and use cookies between requests; customizable cookie jars also possible. (stockholmux)
|
||||
* Fix: attributes named the same as prototype properties of `NamedNodeMap` no longer break jsdom. (papandreou)
|
||||
* Fix: `removeAttributeNS` should not throw on missing attributes. (lddubeau)
|
||||
* Change: remove `__proto__`, `__defineGetter__`, and `__defineSetter__` usage, as part of a project to make jsdom work better across multiple environments. (lawnsea)
|
||||
|
||||
## 0.8.10
|
||||
|
||||
* Add: `hash` property to `HTMLAnchorElement`. (fr0z3nk0)
|
||||
|
||||
## 0.8.9
|
||||
|
||||
* Upgrade: `cssom` to 0.3.0, adding support for `@-moz-document` and fixing a few other issues.
|
||||
* Upgrade: `cssstyle` to 0.2.6, adding support for many shorthand properties and better unit handling.
|
||||
|
||||
## 0.8.8
|
||||
|
||||
* Fix: avoid repeated `NodeList.prototype.length` calculation, for a speed improvement. (peller)
|
||||
|
||||
## 0.8.7
|
||||
|
||||
* Add: `host` property to `HTMLAnchorElement`. (sporchia)
|
||||
|
||||
## 0.8.6
|
||||
|
||||
* Fix: stop accidentally modifying `Error.prototype`. (mitar)
|
||||
* Add: a dummy `getBoundingClientRect` method, that returns `0` for all properties of the rectangle, is now implemented. (F1LT3R)
|
||||
|
||||
## 0.8.5
|
||||
|
||||
* Add: `href` property on `CSSStyleSheet` instances for external CSS files. (FrozenCow)
|
||||
|
||||
## 0.8.4
|
||||
|
||||
* Add: typed array constructors on the `window`. (nlacasse)
|
||||
* Fix: `querySelector` and `querySelectorAll` should be on the prototypes of `Element` and `Document`, not own-properties. (mbostock)
|
||||
|
||||
## 0.8.3
|
||||
|
||||
* Fix: when auto-detecting whether the first parameter to `jsdom.env` is a HTML string or a filename, deal with long strings correctly instead of erroring. (baryshev)
|
||||
|
||||
## 0.8.2
|
||||
|
||||
* Add: basic `window.history` support, including `back`, `forward`, `go`, `pushState`, and `replaceState`. (ralphholzmann)
|
||||
* Add: if an `<?xml?>` declaration starts the document, will try to parse as XML, e.g. not lowercasing the tags. (robdodson)
|
||||
* Fix: tag names passed to `createElement` are coerced to strings before evaluating.
|
||||
|
||||
## 0.8.1 (hotfix)
|
||||
|
||||
* Fix: a casing issue that prevented jsdom from loading on Unix and Solaris systems. (dai-shi)
|
||||
* Fix: `window.location.replace` was broken. (dai-shi)
|
||||
* Fix: update minimum htmlparser2 version, to ensure you get the latest parsing-related bugfixes.
|
||||
|
||||
## 0.8.0
|
||||
|
||||
* Add: working `XMLHttpRequest` support, including cookie passing! (dai-shi)
|
||||
* Add: there is now a `window.navigator.noUI` property that evaluates to true, if you want to specifically distinguish jsdom in your tests.
|
||||
|
||||
## 0.7.0
|
||||
|
||||
* Change: the logic when passing `jsdom.env` a string is more accurate, and you can be explicit by using the `html`, `url`, or `file` properties. This is a breaking change in the behavior of `html`, which used to do the same auto-detection logic as the string-only version.
|
||||
* Fix: errors raised in scripts are now passed to `jsdom.env`'s callback. (airportyh)
|
||||
* Fix: set `window.location.href` correctly when using `jsdom.env` to construct a window from a URL, when that URL causes a redirect. (fegs)
|
||||
* Add: a more complete and accurate `window.location` object, which includes firing `hashchange` events when the hash is changed. (dai-shi)
|
||||
* Add: when using a non-implemented feature, mention exactly what it was that is not implemented in the error message. (papandreou)
|
||||
|
||||
## 0.6.5
|
||||
|
||||
* Fix: custom attributes whose names were the same as properties of `Object.prototype`, e.g. `"constructor"`, would confuse jsdom massively.
|
||||
|
||||
## 0.6.4
|
||||
|
||||
* Fix: CSS selectors which contain commas inside quotes are no longer misinterpreted. (chad3814)
|
||||
* Add: `<img>` elements now fire `"load"` events when their `src` attributes are changed. (kapouer)
|
||||
|
||||
## 0.6.3
|
||||
|
||||
* Fix: better automatic detection of URLs vs. HTML fragments when using `jsdom.env`. (jden)
|
||||
|
||||
## 0.6.2
|
||||
|
||||
* Fix: URL resolution to be amazing and extremely browser-compatible, including the interplay between the document's original URL, any `<base>` tags that were set, and any relative `href`s. This impacts many parts of jsdom having to do with external resources or accurate `href` and `src` attributes. (deitch)
|
||||
* Add: access to frames and iframes via named properties. (adrianlang)
|
||||
* Fix: node-canvas integration, which had been broken since 0.5.7.
|
||||
|
||||
## 0.6.1
|
||||
|
||||
* Make the code parseable with Esprima. (squarooticus)
|
||||
* Use the correct `package.json` field `"repository"` instead of `"repositories"` to prevent npm warnings. (jonathanong)
|
||||
|
||||
## 0.6.0
|
||||
|
||||
Integrated a new HTML parser, [htmlparser2](https://npmjs.org/package/htmlparser2), from fb55. This is an actively maintained and much less buggy parser, fixing many of our parsing issues, including:
|
||||
|
||||
* Parsing elements with optional closing tags, like `<p>` or `<td>`.
|
||||
* The `innerHTML` of `<script>` tags no longer cuts off the first character.
|
||||
* Empty attributes now have `""` as their value instead of the attribute name.
|
||||
* Multiline attributes no longer get horribly mangled.
|
||||
* Attribute names can now be any value allowed by HTML5, including crazy things like `^`.
|
||||
* Attribute values can now contain any value allowed by HTML5, including e.g. `>` and `<`.
|
||||
|
||||
## 0.5.7
|
||||
|
||||
* Fix: make event handlers attached via `on<event>` more spec-compatible, supporting `return false` and passing the `event` argument. (adrianlang)
|
||||
* Fix: make the getter for `textContent` more accurate, e.g. in cases involving comment nodes or processing instruction nodes. (adrianlang)
|
||||
* Fix: make `<canvas>` behave like a `<div>` when the `node-canvas` package isn't available, instead of crashing. (stepheneb)
|
||||
|
||||
## 0.5.6
|
||||
|
||||
* Fix: `on<event>` properties are correctly updated when using `setAttributeNode`, `attributeNode.value =`, `removeAttribute`, and `removeAttributeNode`; before it only worked with `setAttribute`. (adrianlang)
|
||||
* Fix: `HTMLCollection`s now have named properties based on their members' `id` and `name` attributes, e.g. `form.elements.inputId` is now present. (adrianlang)
|
||||
|
||||
## 0.5.5
|
||||
|
||||
* Fix: `readOnly` and `selected` properties were not correct when their attribute values were falsy, e.g. `<option selected="">`. (adrianlang)
|
||||
|
||||
## 0.5.4
|
||||
|
||||
This release, and all future releases, require at least Node.js 0.8.
|
||||
|
||||
* Add: parser can now be set via `jsdom.env` configuration. (xavi-)
|
||||
* Fix: accessing `rowIndex` for table rows that are not part of a table would throw. (medikoo)
|
||||
* Fix: several places in the code accidentally created global variables, or referenced nonexistant values. (xavi-)
|
||||
* Fix: `<img>` elements' `src` properties now evaluate relative to `location.href`, just like `<a>` elements' `href` properties. (brianmaissy)
|
||||
|
||||
## 0.5.3
|
||||
|
||||
This release is compatible with Node.js 0.6, whereas all future releases will require at least Node.js 0.8.
|
||||
|
||||
* Fix: `getAttributeNS` now returns `null` for attributes that are not present, just like `getAttribute`. (mbostock)
|
||||
* Change: `"request"` dependency pinned to version 2.14 for Node.js 0.6 compatibility.
|
||||
|
||||
## 0.5.2
|
||||
|
||||
* Fix: stylesheets with `@-webkit-keyframes` rules were crashing calls to `getComputedStyle`.
|
||||
* Fix: handling of `features` option to `jsdom.env`.
|
||||
* Change: retain the value of the `style` attribute until the element's `style` property is touched. (papandreou)
|
||||
|
||||
## 0.5.1
|
||||
|
||||
* Fix: `selectedIndex` now changes correctly in response to `<option>` elements being selected. This makes `<select>` elements actually work like you would want, especially with jQuery. (xcoderzach)
|
||||
* Fix: `checked` works correctly on radio buttons, i.e. only one can be checked and clicking on one does not uncheck it. Previously they worked just like checkboxes. (xcoderzach)
|
||||
* Fix: `click()` on `<input>` elements now fires a click event. (xcoderzach)
|
||||
|
||||
## 0.5.0
|
||||
|
||||
* Fix: Make `contextify` a non-optional dependency. jsdom never worked without it, really, so this just caused confusion.
|
||||
|
||||
## 0.4.2
|
||||
|
||||
* Fix: `selected` now returns true for the first `<option>` in a `<select>` if nothing is explicitly set.
|
||||
* Fix: tweaks to accuracy and speed of the `querySelectorAll` implementation.
|
||||
|
||||
## 0.4.1 (hotfix)
|
||||
|
||||
* Fix: crashes when loading HTML files with `<a>` tags with no `href` attribute. (eleith)
|
||||
|
||||
## 0.4.0
|
||||
|
||||
* Fix: `getAttribute` now returns `null` for attributes that are not present, as per DOM4 (but in contradiction to DOM1 through DOM3).
|
||||
* Fix: static `NodeList`-returning methods (such as `querySelectorAll`) now return a real `NodeList` instance.
|
||||
* Change: `NodeList`s no longer expose nonstandard properties to the world, like `toArray`, without first prefixing them with an underscore.
|
||||
* Change: `NodeList`s no longer inconsistently have array methods. Previously, live node lists would have `indexOf`, while static node lists would have them all. Now, they have no array methods at all, as is correct per the specification.
|
||||
|
||||
## 0.3.4
|
||||
|
||||
* Fix: stylesheets with `@media` rules were crashing calls to `getComputedStyle`, e.g. those in jQuery's initialization.
|
||||
|
||||
## 0.3.3
|
||||
|
||||
* Fix: make `document.write` calls insert new elements correctly. (johanoverip, kblomquist).
|
||||
* Fix: `<input>` tags with no `type` attribute now return a default value of `"text"` when calling `inputEl.getAttribute("type")`.
|
||||
|
||||
## 0.3.2
|
||||
|
||||
* Fix: stylesheets with "joining" rules (i.e. those containing comma-separated selectors) now apply when using `getComputedStyle`. (chad3814, godmar)
|
||||
* Add: support for running the tests using @aredridel's [html5](https://npmjs.org/package/html5) parser, as a prelude toward maybe eventually making this the default and fixing various parsing bugs.
|
||||
|
||||
## 0.3.1 (hotfix)
|
||||
|
||||
* Fix: crashes when invalid selectors were present in stylesheets.
|
||||
|
||||
## 0.3.0
|
||||
|
||||
* Fix: a real `querySelector` implementation, courtesy of the nwmatcher project, solves many outstanding `querySelector` bugs.
|
||||
* Add: `matchesSelector`, again via nwmatcher.
|
||||
* Add: support for styles coming from `<style>` and `<link rel="stylesheet">` elements being applied to the results of `window.getComputedStyle`. (chad3814)
|
||||
* Add: basic implementation of `focus()` and `blur()` methods on appropriate elements. More work remains.
|
||||
* Fix: script filenames containing spaces will now work when passed to `jsdom.env`. (TomNomNom)
|
||||
* Fix: elements with IDs `toString`, `hasOwnProperty`, etc. could cause lots of problems.
|
||||
* Change: A window's `load` event always fires asynchronously now, even if no external resources are necessary.
|
||||
* Change: turning off mutation events is not supported, since doing so breaks external-resource fetching.
|
||||
|
||||
## 0.2.19
|
||||
|
||||
* Fix: URL resolution was broken on pages that included `href`-less `<base>` tags.
|
||||
* Fix: avoid putting `attr` in the global scope when using node-canvas. (starsquare)
|
||||
* Add: New `SkipExternalResources` feature accepts a regular expression. (fgalassi)
|
||||
|
||||
## 0.2.18
|
||||
|
||||
* Un-revert: cssstyle has fixed its memory problems, so we get back accurate `cssText` and `style` properties again.
|
||||
|
||||
## 0.2.17 (hotfix)
|
||||
|
||||
* Revert: had to revert the use of the cssstyle package. `cssText` and `style` properties are no longer as accurate.
|
||||
* Fix: cssstyle was causing out-of-memory errors on some larger real-world pages, e.g. reddit.com.
|
||||
|
||||
## 0.2.16
|
||||
* Update: Sizzle version updated to circa September 2012.
|
||||
* Fix: when setting a text node's value to a falsy value, convert it to a string instead of coercing it to `""`.
|
||||
* Fix: Use the cssstyle package for `CSSStyleDeclaration`, giving much more accurate `cssText` and `style` properties on all elements. (chad3814)
|
||||
* Fix: the `checked` property on checkboxes and radiobuttons now reflects the attribute correctly.
|
||||
* Fix: `HTMLOptionElement`'s `text` property should return the option's text, not its value.
|
||||
* Fix: make the `name` property only exist on certain specific tags, and accurately reflect the corresponding `name` attribute.
|
||||
* Fix: don't format `outerHTML` (especially important for `<pre>` elements).
|
||||
* Fix: remove the `value` property from `Text` instances (e.g. text nodes).
|
||||
* Fix: don't break in the presence of a `String.prototype.normalize` method, like that of sugar.js.
|
||||
* Fix: include level3/xpath correctly.
|
||||
* Fix: many more tests passing, especially related to file:/// URLs on Windows. Tests can now be run with `npm test`.
|
||||
|
||||
## 0.2.15
|
||||
* Fix: make sure that doctypes don't get set as the documentElement (Aria Stewart)
|
||||
* Add: HTTP proxy support for jsdom.env (Eugene Ware)
|
||||
* Add: .hostname and .pathname properties to Anchor elements to comply with WHATWG standard (Avi Deitcher)
|
||||
* Fix: Only decode HTML entities in text when not inside a `<script>` or `<style>` tag. (Andreas Lind Petersen)
|
||||
* Fix: HTMLSelectElement single selection implemented its type incorrectly as 'select' instead of 'select-one' (John Roberts)
|
||||
|
||||
## 0.2.14
|
||||
* Fix: when serializing single tags use ' />' instead of '/>' (kapouer)
|
||||
* Fix: support for contextify simulation using vm.runInContext (trodrigues)
|
||||
* Fix: allow jsdom.env's config.html to handle file paths which contain spaces (shinuza)
|
||||
* Fix: Isolate QuerySelector from prototype (Nao Iizuka)
|
||||
* Add: setting textContent to '' or clears children (Jason Davies)
|
||||
* Fix: jsdom.env swallows exceptions that occur in the callback (Xavi)
|
||||
|
||||
## 0.2.13
|
||||
* Fix: remove unused style property which was causing explosions in 0.2.12 and node 0.4.7
|
||||
|
||||
## 0.2.12
|
||||
* Fix: do not include gmon.out/v8.log/tests in npm distribution
|
||||
|
||||
## 0.2.11
|
||||
* Add: allow non-unique element ids (Avi Deitcher)
|
||||
* Fix: make contexify an optional dependency (Isaac Schlueter)
|
||||
* Add: scripts injected by jsdom are now marked with a 'jsdom' class for serialization's sake (Peter Lyons)
|
||||
* Fix: definition for ldquo entity (Andrew Morton)
|
||||
* Fix: access NamedNodeMap items via property (Brian McDaniel)
|
||||
* Add: upgrade sizzle from 1.0 to [fe2f6181](https://github.com/jquery/sizzle/commit/fe2f618106bb76857b229113d6d11653707d0b22) which is roughly 1.5.1
|
||||
* Add: documentation now includes `jsdom.level(x, 'feature')`
|
||||
* Fix: make `toArray` and `item` on `NodeList` objects non-enumerable properties
|
||||
* Add: a reference to `window.close` in the readme
|
||||
* Fix: Major performance boost (Felix Gnass)
|
||||
* Fix: Using querySelector `:not()` throws a `ReferenceError` (Felix Gnass)
|
||||
|
||||
## 0.2.10
|
||||
* Fix: problems with lax dependency versions
|
||||
* Fix: CSSOM constructors are hung off of the dom (Brian McDaniel)
|
||||
* Fix: move away from deprecated 'sys' module
|
||||
* Fix: attribute event handlers on bubbling path aren't called (Brian McDaniel)
|
||||
* Fix: setting textarea.value to markup should not be parsed (Andreas Lind Petersen)
|
||||
* Fix: content of script tags should not be escaped (Ken Sternberg)
|
||||
* Fix: DocumentFeatures for iframes with no src attribute. (Brian McDaniel) Closes #355
|
||||
* Fix: 'trigger' to 'raise' to be a bit more descriptive
|
||||
* Fix: When `ProcessExternalResources['script']` is disabled, do _not_ run inline event handlers. #355
|
||||
* Add: verbose flag to test runner (to show tests as they are running and finishing)
|
||||
|
||||
## 0.2.9
|
||||
* Fix: ensure features are properly reset after a jsdom.env invocation. Closes #239
|
||||
* Fix: ReferenceError in the scanForImportRules helper function
|
||||
* Fix: bug in appendHtmlToElement with HTML5 parser (Brian McDaniel)
|
||||
* Add: jsonp support (lheiskan)
|
||||
* Fix: for setting script element's text property (Brian McDaniel)
|
||||
* Fix: for jsdom.env src bug
|
||||
* Add: test for jsdom.env src bug (multiple done calls)
|
||||
* Fix: NodeList properties should enumerate like arrays (Felix Gnass)
|
||||
* Fix: when downloading a file, include the url.search in file path
|
||||
* Add: test for making a jsonp request with jquery from jsdom window
|
||||
* Add: test case for issue #338
|
||||
* Fix: double load behavior when mixing jsdom.env's `scripts` and `src` properties (cjroebuck)
|
||||
|
||||
## 0.2.8 (hotfix)
|
||||
* Fix: inline event handlers are ignored by everything except for the javascript context
|
||||
|
||||
## 0.2.7 (hotfix)
|
||||
* Fix stylesheet loading
|
||||
|
||||
## 0.2.6
|
||||
* Add: support for window.location.search and document.cookie (Derek Lindahl)
|
||||
* Add: jsdom.env now has a document configuation option which allows users to change the referer of the document (Derek Lindahl)
|
||||
* Fix: allow users to use different jsdom levels in the same process (sinegar)
|
||||
* Fix: removeAttributeNS no longer has a return value (Jason Davies)
|
||||
* Add: support for encoding/decoding all html entities from html4/5 (papandreou)
|
||||
* Add: jsdom.env() accepts the same features object seen in jsdom.jsdom and friends
|
||||
|
||||
## 0.2.5
|
||||
* Fix: serialize special characters in Element.innerHTML/Element.attributes like a grade A browser (Jason Priestley)
|
||||
* Fix: ensure Element.getElementById only returns elements that are attached to the document
|
||||
* Fix: ensure an Element's id is updated when changing the nodeValue of the 'id' attribute (Felix Gnass)
|
||||
* Add: stacktrace to error reporter (Josh Marshall)
|
||||
* Fix: events now bubble up to the window (Jason Davies)
|
||||
* Add: initial window.location.hash support (Josh Marshall)
|
||||
* Add: Node#insertBefore should do nothing when both params are the same node (Jason Davies)
|
||||
* Add: fixes for DOMAttrModified mutation events (Felix Gnass)
|
||||
|
||||
## 0.2.4
|
||||
* Fix: adding script to invalid/incomplete dom (document.documentElement) now catches the error and passes it in the `.env` callback (Gregory Tomlinson)
|
||||
* Cleanup: trigger and html tests
|
||||
* Add: support for inline event handlers (ie: `<div onclick='some.horrible.string()'>`) (Brian McDaniel)
|
||||
* Fix: script loading over https (Brian McDaniel) #280
|
||||
* Add: using style.setProperty updates the style attribute (Jimmy Mabey).
|
||||
* Add: invalid markup is reported as an error and attached to the associated element and document
|
||||
* Fix: crash when setChild() failes to create new DOM element (John Hurliman)
|
||||
* Added test for issue #287.
|
||||
* Added support for inline event handlers.
|
||||
* Moved frame tests to test/window/frame.js and cleaned up formatting.
|
||||
* Moved script execution tests to test/window/script.js.
|
||||
* Fix a crash when setChild() fails to create a new DOM element
|
||||
* Override CSSOM to update style attribute
|
||||
|
||||
## 0.2.3
|
||||
* Fix: segfault due to window being garbage collected prematurely
|
||||
NOTE: you must manually close the window to free memory (window.close())
|
||||
|
||||
## 0.2.2
|
||||
* Switch to Contextify to manage the window's script execution.
|
||||
* Fix: allow nodelists to have a length of 0 and toArray to return an empty array
|
||||
* Fix: style serialization; issues #230 and #259
|
||||
* Fix: Incomplete DOCTYPE causes JavaScript error
|
||||
* Fix: indentation, removed outdated debug code and trailing whitespace.
|
||||
* Prevent JavaScript error when parsing incomplete `<!DOCTYPE>`. Closes #259.
|
||||
* Adding a test from brianmcd that ensures that setTimeout callbacks execute in the context of the window
|
||||
* Fixes issue 250: make `document.parentWindow === window` work
|
||||
* Added test to ensure that timer callbacks execute in the window context.
|
||||
* Fixes 2 issues in ResourceQueue
|
||||
* Make frame/iframe load/process scripts if the parent has the features enabled
|
||||
|
||||
## 0.2.1
|
||||
* Javascript execution fixes [#248, #163, #179]
|
||||
* XPath (Yonathan and Daniel Cassidy)
|
||||
* Start of cssom integration (Yonathan)
|
||||
* Conversion of tests to nodeunit! (Martin Davis)
|
||||
* Added sizzle tests, only failing 3/15
|
||||
* Set the title node's textContent rather than its innerHTML #242. (Andreas Lind Petersen)
|
||||
* The textContent getter now walks the DOM and extract the text properly. (Andreas Lind Petersen)
|
||||
* Empty scripts won't cause jsdom.env to hang #172 (Karuna Sagar)
|
||||
* Every document has either a body or a frameset #82. (Karuna Sagar)
|
||||
* Added the ability to grab a level by string + feature. ie: jsdom.level(2, 'html') (Aria Stewart)
|
||||
* Cleaned up htmlencoding and fixed character (de)entification #147, #177 (Andreas Lind Petersen)
|
||||
* htmlencoding.HTMLDecode: Fixed decoding of `<`, `>`, `&`, and `'`. Closes #147 and #177.
|
||||
* Require dom level as a string or object. (Aria Stewart)
|
||||
* JS errors ar triggered on the script element, not document. (Yonathan)
|
||||
* Added configuration property 'headers' for HTTP request headers. (antonj)
|
||||
* Attr.specified is readonly - Karuna Sagar
|
||||
* Removed return value from setAttributeNS() #207 (Karuna Sagar)
|
||||
* Pass the correct script filename to runInContext. (robin)
|
||||
* Add http referrer support for the download() function. (Robin)
|
||||
* First attempt at fixing the horrible memory leak via window.stopTimers() (d-ash)
|
||||
* Use vm instead of evals binding (d-ash)
|
||||
* Add a way to set the encoding of the jsdom.env html request.
|
||||
* Fixed various typos/lint problems (d-ash)
|
||||
* The first parameter download is now the object returned by URL.parse(). (Robin)
|
||||
* Fixed serialization of elements with a style attribute.
|
||||
* Added src config option to jsdom.env() (Jerry Sievert)
|
||||
* Removed dead code from getNamedItemNS() (Karuna Sagar)
|
||||
* Changes to language/javascript so jsdom would work on v0.5.0-pre (Gord Tanner)
|
||||
* Correct spelling of "Hierarchy request error" (Daniel Cassidy)
|
||||
* Node and Exception type constants are available in all levels. (Daniel Cassidy)
|
||||
* Use \n instead of \r\n during serialization
|
||||
* Fixed auto-insertion of body/html tags (Adrian Makowski)
|
||||
* Adopt unowned nodes when added to the tree. (Aria Stewart)
|
||||
* Fix the selected and defaultSelected fields of `option` element. - Yonathan
|
||||
* Fix: EventTarget.getListeners() now returns a shallow copy so that listeners can be safely removed while an event is being dispatched. (Felix Gnass)
|
||||
* Added removeEventListener() to DOMWindow (Felix Gnass)
|
||||
* Added the ability to pre-load scripts for jsdom.env() (Jerry Sievert)
|
||||
* Mutation event tests/fixes (Felix Gnass)
|
||||
* Changed HTML serialization code to (optionally) pretty print while traversing the tree instead of doing a regexp-based postprocessing. (Andreas Lind Petersen)
|
||||
* Relative and absolute urls now work as expected
|
||||
* setNamedItem no longer sets Node.parentNode #153 (Karuna Sagar)
|
||||
* Added missing semicolon after entity name - Felix Gnass
|
||||
* Added NodeList#indexOf implementation/tests (Karuna Sagar)
|
||||
* resourceLoader.download now works correctly with https and redirects (waslogic)
|
||||
* Scheme-less URLs default to the current protocol #87 (Alexander Flatter)
|
||||
* Simplification the prevSibling(), appendChild(), insertBefore() and replaceChild() code (Karuna Sagar)
|
||||
* Javascript errors use core.Node.trigger (Alexander Flatter)
|
||||
* Add core.Document.trigger in level1/core and level2/events; Make DOMWindow.console use it (Alexander Flatter)
|
||||
* Resource resolver fixes (Alexander Flatter)
|
||||
* Fix serialization of doctypes with new lines #148 (Karuna Sagar)
|
||||
* Child nodes are calculated immediately instead of after .length is called #169, #171, #176 (Karuna Sagar)
|
44
bower_components/jsdom/Contributing.md
vendored
Normal file
44
bower_components/jsdom/Contributing.md
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
## Mission
|
||||
|
||||
jsdom is, as said in our tagline, “A JavaScript implementation of the DOM and HTML standards.” Anything that helps us be better at that is welcome.
|
||||
|
||||
## Status
|
||||
|
||||
We're transitioning from an older model based on separate and obsolete "DOM1," "DOM2," and "DOM3" specs, into one based on the modern DOM and HTML living standards. Nobody has really set aside the time to do the proper sort of architectural overhaul this transition necessitates, so things might seem a bit strange, but in the meantime we're doing OK with the current structure.
|
||||
|
||||
## Existing Tests
|
||||
|
||||
The DOM, thankfully, has lots of tests already out there. Those already included in the repository are of two types:
|
||||
|
||||
* Auto-generated or adapted from older W3C tests.
|
||||
* Written by contributors to plug gaps in those tests.
|
||||
|
||||
Of these, of course, the first is preferable. When we find gaps, we usually add the tests at the bottom of the relevant auto-generated test suite, e.g. in `test/level2/html.js`.
|
||||
|
||||
The current test compliance is tracked [in the README](https://github.com/tmpvar/jsdom#test-compliance).
|
||||
|
||||
## Contributing
|
||||
|
||||
When contributing, the first question you should ask is:
|
||||
|
||||
**Can I exhibit how the browsers differ from what jsdom is doing?**
|
||||
|
||||
If you can, then you've almost certainly found a bug in or missing feature of jsdom, and we'd love to have your contribution. In that case, move on to:
|
||||
|
||||
**What WHATWG spec covers this potential contribution?**
|
||||
|
||||
Almost all of our relevant functionality is covered in either the [DOM Living Standard](http://dom.spec.whatwg.org/) or the [HTML Living Standard](http://www.whatwg.org/specs/web-apps/current-work/). There are various obsolete W3C specs ("DOM Level 2" etc.) that were never really implemented in browsers, and there is also the "DOM Level 4" W3C fork of the WHATWG DOM Living Standard. But we try to stick to the two main WHATWG specs for jsdom these days.
|
||||
|
||||
Once you have that nailed down, you'll want to ask:
|
||||
|
||||
**Where can I get an official test for this functionality?**
|
||||
|
||||
We ported in some of the tests for the old DOM1 and DOM2 specs, as well as some DOM3 ones that are currently disabled. These are sometimes wrong however (given that browsers never really implemented those specs), and we have had to change, add to, or remove them in the past.
|
||||
|
||||
These days the [w3c/web-platform-tests](https://github.com/w3c/web-platform-tests) project has an ever-growing set of tests for the DOM and HTML standards, and is the best place to try to find good tests to adapt. jsdom doesn't yet have the ability to run those tests directly (that's [#666](https://github.com/tmpvar/jsdom/issues/666)), but you can copy and adapt them as you see fit. If you can't find anything, you can always ask [public-webapps-testsuite@w3.org](mailto:public-webapps-testsuite@w3.org), [like I did](http://lists.w3.org/Archives/Public/public-webapps-testsuite/2012Aug/0001.html), or stop into the #whatwg IRC channel.
|
||||
|
||||
If there is no official test covering the functionality you're after, then you can write your own. You might want to submit a pull request to the web-platform-tests repo too!
|
||||
|
||||
## Issues
|
||||
|
||||
Finally, we have [an active and full issue tracker](https://github.com/tmpvar/jsdom/issues) that we'd love you to help with. Go find something broken, and fix it!
|
22
bower_components/jsdom/LICENSE.txt
vendored
Normal file
22
bower_components/jsdom/LICENSE.txt
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
Copyright (c) 2010 Elijah Insua
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
352
bower_components/jsdom/README.md
vendored
Normal file
352
bower_components/jsdom/README.md
vendored
Normal file
@ -0,0 +1,352 @@
|
||||
# jsdom
|
||||
|
||||
A JavaScript implementation of the W3C DOM.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
$ npm install jsdom
|
||||
```
|
||||
|
||||
If this gives you trouble with errors about installing Contextify, especially on Windows, see [below](#contextify).
|
||||
|
||||
## Human contact
|
||||
|
||||
see: [mailing list](http://groups.google.com/group/jsdom)
|
||||
|
||||
## Easymode
|
||||
|
||||
Bootstrapping a DOM is generally a difficult process involving many error prone steps. We didn't want jsdom to fall into the same trap and that is why a new method, `jsdom.env()`, has been added in jsdom 0.2.0 which should make everyone's lives easier.
|
||||
|
||||
You can use it with a URL
|
||||
|
||||
```js
|
||||
// Count all of the links from the Node.js build page
|
||||
var jsdom = require("jsdom");
|
||||
|
||||
jsdom.env(
|
||||
"http://nodejs.org/dist/",
|
||||
["http://code.jquery.com/jquery.js"],
|
||||
function (errors, window) {
|
||||
console.log("there have been", window.$("a").length, "nodejs releases!");
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
or with raw HTML
|
||||
|
||||
```js
|
||||
// Run some jQuery on a html fragment
|
||||
var jsdom = require("jsdom");
|
||||
|
||||
jsdom.env(
|
||||
'<p><a class="the-link" href="https://github.com/tmpvar/jsdom">jsdom\'s Homepage</a></p>',
|
||||
["http://code.jquery.com/jquery.js"],
|
||||
function (errors, window) {
|
||||
console.log("contents of a.the-link:", window.$("a.the-link").text());
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
or with a configuration object
|
||||
|
||||
```js
|
||||
// Print all of the news items on hackernews
|
||||
var jsdom = require("jsdom");
|
||||
|
||||
jsdom.env({
|
||||
url: "http://news.ycombinator.com/",
|
||||
scripts: ["http://code.jquery.com/jquery.js"],
|
||||
done: function (errors, window) {
|
||||
var $ = window.$;
|
||||
console.log("HN Links");
|
||||
$("td.title:not(:last) a").each(function() {
|
||||
console.log(" -", $(this).text());
|
||||
});
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
or with raw JavaScript source
|
||||
|
||||
```js
|
||||
// Print all of the news items on hackernews
|
||||
var jsdom = require("jsdom");
|
||||
var fs = require("fs");
|
||||
var jquery = fs.readFileSync("./jquery.js", "utf-8");
|
||||
|
||||
jsdom.env({
|
||||
url: "http://news.ycombinator.com/",
|
||||
src: [jquery],
|
||||
done: function (errors, window) {
|
||||
var $ = window.$;
|
||||
console.log("HN Links");
|
||||
$("td.title:not(:last) a").each(function () {
|
||||
console.log(" -", $(this).text());
|
||||
});
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### How it works
|
||||
`jsdom.env` is built for ease of use, which is rare in the world of the DOM! Since the web has some absolutely horrible JavaScript on it, as of jsdom 0.2.0 `jsdom.env` will not process external resources (scripts, images, etc). If you want to process the JavaScript use one of the methods below (`jsdom.jsdom` or `jsdom.jQueryify`)
|
||||
|
||||
```js
|
||||
jsdom.env(string, [scripts], [config], callback);
|
||||
```
|
||||
|
||||
The arguments are:
|
||||
|
||||
- `string`: may be a URL, file name, or HTML fragment
|
||||
- `scripts`: a string or array of strings, containing file names or URLs that will be inserted as `<script>` tags
|
||||
- `config`: see below
|
||||
- `callback`: takes two arguments
|
||||
- `error`: either an `Error` object if something failed initializing the window, or an array of error messages from the DOM if there were script errors
|
||||
- `window`: a brand new `window`
|
||||
|
||||
_Example:_
|
||||
|
||||
```js
|
||||
jsdom.env(html, function (errors, window) {
|
||||
// free memory associated with the window
|
||||
window.close();
|
||||
});
|
||||
```
|
||||
|
||||
If you would like to specify a configuration object only:
|
||||
|
||||
```js
|
||||
jsdom.env(config);
|
||||
```
|
||||
|
||||
- `config.html`: a HTML fragment
|
||||
- `config.file`: a file which jsdom will load HTML from; the resulting window's `location.href` will be a `file://` URL.
|
||||
- `config.url`: sets the resulting window's `location.href`; if `config.html` and `config.file` are not provided, jsdom will load HTML from this URL.
|
||||
- `config.scripts`: see `scripts` above.
|
||||
- `config.src`: an array of JavaScript strings that will be evaluated against the resulting document. Similar to `scripts`, but it accepts JavaScript instead of paths/URLs.
|
||||
- `config.jar`: a custom cookie jar, if desired; see [mikeal/request](https://github.com/mikeal/request) documentation.
|
||||
- `config.done`: see `callback` above.
|
||||
- `config.document`:
|
||||
- `referrer`: the new document will have this referrer.
|
||||
- `cookie`: manually set a cookie value, e.g. `'key=value; expires=Wed, Sep 21 2011 12:00:00 GMT; path=/'`.
|
||||
- `cookieDomain`: a cookie domain for the manually set cookie; defaults to `127.0.0.1`.
|
||||
- `config.features` : see `Flexibility` section below. **Note**: the default feature set for jsdom.env does _not_ include fetching remote JavaScript and executing it. This is something that you will need to **carefully** enable yourself.
|
||||
|
||||
Note that `config.done` is required, as is one of `config.html`, `config.file`, or `config.url`.
|
||||
|
||||
## For the hardcore
|
||||
|
||||
If you want to spawn a document/window and specify all sorts of options this is the section for you. This section covers the `jsdom.jsdom` method:
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom").jsdom;
|
||||
var doc = jsdom(markup, level, options);
|
||||
var window = doc.parentWindow;
|
||||
```
|
||||
|
||||
- `markup` is an HTML/XML document to be parsed. You can also pass `null` or an undefined value to get a basic document with empty `<head>` and `<body>` tags. Document fragments are also supported (including `""`), and will behave as sanely as possible (e.g. the resulting document will lack the `head`, `body` and `documentElement` properties if the corresponding elements aren't included).
|
||||
|
||||
- `level` is `null` (which means level3) by default, but you can pass another level if you'd like.
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom");
|
||||
var doc = jsdom.jsdom("<html><body></body></html>", jsdom.level(1, "core"));
|
||||
```
|
||||
|
||||
- `options` See the explanation of the `config` object above.
|
||||
|
||||
### Flexibility
|
||||
|
||||
One of the goals of jsdom is to be as minimal and light as possible. This section details how someone can change the behavior of `Document`s on the fly. These features are baked into the `DOMImplementation` that every `Document` has, and may be tweaked in two ways:
|
||||
|
||||
1. When you create a new `Document` using the jsdom builder (`require("jsdom").jsdom()`)
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom").jsdom;
|
||||
var doc = jsdom("<html><body></body></html>", null, {
|
||||
features: {
|
||||
FetchExternalResources : ["img"]
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
Do note, that this will only affect the document that is currently being created. All other documents will use the defaults specified below (see: Default Features).
|
||||
|
||||
2. Before creating any documents, you can modify the defaults for all future documents:
|
||||
|
||||
```js
|
||||
require("jsdom").defaultDocumentFeatures = {
|
||||
FetchExternalResources: ["script"],
|
||||
ProcessExternalResources: false
|
||||
};
|
||||
```
|
||||
|
||||
#### Default Features
|
||||
|
||||
Default features are extremely important for jsdom as they lower the configuration requirement and present developers a set of consistent default behaviors. The following sections detail the available features, their defaults, and the values that jsdom uses.
|
||||
|
||||
|
||||
`FetchExternalResources`
|
||||
|
||||
- _Default_: `["script"]`
|
||||
- _Allowed_: `["script", "img", "css", "frame", "iframe", "link"]` or `false`
|
||||
|
||||
Enables/disables fetching files over the file system/HTTP.
|
||||
|
||||
`ProcessExternalResources`
|
||||
|
||||
- _Default_: `["script"]`
|
||||
- _Allowed_: `["script"]` or `false`
|
||||
|
||||
Disabling this will disable script execution (currently only JavaScript).
|
||||
|
||||
`SkipExternalResources`
|
||||
|
||||
- _Default_: `false`
|
||||
- _Allowed_: `/url to be skipped/` or `false`
|
||||
- _Example_: `/http:\/\/example.org/js/bad\.js/`
|
||||
|
||||
Do not download and process resources with url matching a regular expression.
|
||||
|
||||
### Canvas
|
||||
|
||||
jsdom includes support for using the [canvas](https://npmjs.org/package/canvas) package to extend any `<canvas>` elements with the canvas API. To make this work, you need to include canvas as a dependency in your project, as a peer of jsdom. If jsdom can find the canvas package, it will use it, but if it's not present, then `<canvas>` elements will behave like `<div>`s.
|
||||
|
||||
## More Examples
|
||||
|
||||
### Creating a document
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom");
|
||||
var doc = new (jsdom.level(1, "core").Document)();
|
||||
|
||||
console.log(doc.nodeName); // outputs: #document
|
||||
```
|
||||
|
||||
### Creating a browser-like BOM/DOM/Window
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom").jsdom;
|
||||
var document = jsdom("<html><head></head><body>hello world</body></html>");
|
||||
var window = document.parentWindow;
|
||||
|
||||
console.log(window.document.innerHTML);
|
||||
// output: "<html><head></head><body>hello world</body></html>"
|
||||
|
||||
console.log(window.innerWidth);
|
||||
// output: 1024
|
||||
|
||||
console.log(typeof window.document.getElementsByClassName);
|
||||
// outputs: function
|
||||
```
|
||||
|
||||
### jQueryify
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom");
|
||||
var window = jsdom.jsdom().parentWindow;
|
||||
|
||||
jsdom.jQueryify(window, "http://code.jquery.com/jquery.js", function () {
|
||||
window.$("body").append('<div class="testing">Hello World, It works</div>');
|
||||
|
||||
console.log(window.$(".testing").text());
|
||||
});
|
||||
```
|
||||
|
||||
### Passing objects to scripts inside the page
|
||||
|
||||
```js
|
||||
var jsdom = require("jsdom").jsdom;
|
||||
var window = jsdom().parentWindow;
|
||||
|
||||
window.__myObject = { foo: "bar" };
|
||||
|
||||
var scriptEl = window.document.createElement("script");
|
||||
scriptEl.src = "anotherScript.js";
|
||||
window.document.body.appendChild(scriptEl);
|
||||
|
||||
// anotherScript.js will have the ability to read `window.__myObject`, even
|
||||
// though it originated in Node!
|
||||
```
|
||||
|
||||
## Test Compliance:
|
||||
|
||||
```
|
||||
level1/core 535/535 100%
|
||||
level1/html 238/238 100%
|
||||
level1/svg 527/527 100%
|
||||
level2/core 287/287 100%
|
||||
level2/html 717/717 100%
|
||||
level2/style 15/15 100%
|
||||
level2/extra 4/4 100%
|
||||
level2/events 24/24 100%
|
||||
level3/xpath 93/93 100%
|
||||
whatwg/attributes 10/10 100%
|
||||
window/index 8/8 100%
|
||||
window/history 5/5 100%
|
||||
window/script 10/10 100%
|
||||
window/console 2/2 100%
|
||||
window/frame 17/17 100%
|
||||
sizzle/index 14/14 100%
|
||||
jsdom/index 84/84 100%
|
||||
jsdom/parsing 11/11 100%
|
||||
jsdom/env 25/25 100%
|
||||
jsdom/utils 11/11 100%
|
||||
jsonp/jsonp 1/1 100%
|
||||
browser/css 1/1 100%
|
||||
browser/index 34/34 100%
|
||||
------------------------------------------
|
||||
TOTALS: 0/2673 failed; 100% success
|
||||
```
|
||||
|
||||
### Running the tests
|
||||
|
||||
First you'll want to `npm install`. To run all the tests, use `npm test`, which just calls `node test/runner`.
|
||||
|
||||
Using `test/runner` directly, you can slice and dice which tests your want to run from different levels. Usage is as follows:
|
||||
|
||||
```
|
||||
test/runner --help
|
||||
Run the jsdom test suite
|
||||
|
||||
Options:
|
||||
-s, --suites suites that you want to run. ie: -s level1/core,1/html,html [string]
|
||||
-f, --fail-fast stop on the first failed test
|
||||
-h, --help show the help
|
||||
-t, --tests choose the test cases to run. ie: -t jquery
|
||||
```
|
||||
|
||||
## Contextify
|
||||
|
||||
[Contextify](https://npmjs.org/package/contextify) is a dependency of jsdom, used for running `<script>` tags within the
|
||||
page. In other words, it allows jsdom, which is run in Node.js, to run strings of JavaScript in an isolated environment
|
||||
that pretends to be a browser environment instead of a server. You can see how this is an important feature.
|
||||
|
||||
Unfortunately, doing this kind of magic requires C++. And in Node.js, using C++ from JavaScript means using "native
|
||||
modules." Native modules are compiled at installation time so that they work precisely for your machine; that is, you
|
||||
don't download a contextify binary from npm, but instead build one locally after downloading the source from npm.
|
||||
|
||||
|
||||
Unfortunately, getting C++ compiled within npm's installation system can be tricky, especially for Windows users. Thus,
|
||||
one of the most common problems with jsdom is trying to use it without the proper compilation tools installed.
|
||||
Here's what you need to compile Contextify, and thus to install jsdom:
|
||||
|
||||
### Windows
|
||||
|
||||
* A recent copy of the *x86* version of [Node.js for Windows](http://nodejs.org/download/), *not* the x64 version.
|
||||
* A copy of [Visual C++ 2010 Express](http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express).
|
||||
* A copy of [Python 2.7](http://www.python.org/download/), installed in the default location of `C:\Python27`.
|
||||
|
||||
There are some slight modifications to this that can work; for example full versions of Visual Studio usually work, and
|
||||
sometimes you can even get an x64 version of Node.js working too. But it's tricky, so start with the basics!
|
||||
|
||||
### Mac
|
||||
|
||||
* XCode needs to be installed
|
||||
* "Command line tools for XCode" need to be installed
|
||||
* Launch XCode once to accept the license, etc. and ensure it's properly installed
|
||||
|
||||
### Linux
|
||||
|
||||
You'll need various build tools installed, like `make`, Python 2.7, and a compiler toolchain. How to install these will
|
||||
be specific to your distro, if you don't already have them.
|
23
bower_components/jsdom/benchmark/mark.js
vendored
Normal file
23
bower_components/jsdom/benchmark/mark.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Taken from: http://ejohn.org/blog/javascript-benchmark-quality/
|
||||
module.exports = runTest(name, test, next, callback){
|
||||
var runs = [], r = 0;
|
||||
setTimeout(function(){
|
||||
var start = Date.now(), diff = 0;
|
||||
|
||||
for ( var n = 0; diff < 1000; n++ ) {
|
||||
test();
|
||||
diff = Date.now() - start;
|
||||
}
|
||||
|
||||
runs.push( n );
|
||||
|
||||
if ( r++ < 4 )
|
||||
setTimeout( arguments.callee, 0 );
|
||||
else {
|
||||
done(name, runs);
|
||||
if ( next )
|
||||
setTimeout( next, 0 );
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
|
0
bower_components/jsdom/benchmark/stats.json
vendored
Normal file
0
bower_components/jsdom/benchmark/stats.json
vendored
Normal file
34
bower_components/jsdom/example/browser/browser.js
vendored
Normal file
34
bower_components/jsdom/example/browser/browser.js
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
var dom = require('../../lib/jsdom/level2/html').dom.level2.html;
|
||||
var browser = require('../../lib/jsdom/browser/index').windowAugmentation(dom);
|
||||
|
||||
var document = browser.document;
|
||||
var window = browser.window;
|
||||
var self = browser.self;
|
||||
var navigator = browser.navigator;
|
||||
var location = browser.location;
|
||||
|
||||
document.title = 'Test Title';
|
||||
|
||||
//GLOBAL
|
||||
var el = document.createElement('div');
|
||||
el.id = 'foo';
|
||||
el.innerHTML = '<em>This is a test</em> This <strong class="odd">is another</strong> test ';
|
||||
document.body.appendChild(el);
|
||||
|
||||
//SCOPED
|
||||
var el2 = browser.document.createElement('div');
|
||||
el2.id = 'foo2bar';
|
||||
el2.innerHTML = '<em class="odd">This is a test</em> This <strong>is another</strong> test ';
|
||||
browser.document.body.appendChild(el2);
|
||||
|
||||
console.log('getElementByid(foo2bar): ' + browser.document.getElementById('foo2bar'));
|
||||
console.log('getElementByid(foo): ' + browser.document.getElementById('foo'));
|
||||
console.log('getElementByTagName(em): ' + browser.document.getElementsByTagName('em'));
|
||||
console.log('getElementByClassName(odd): ' + browser.document.getElementsByClassName('odd'));
|
||||
|
||||
console.log('');
|
||||
console.log('document.body.outerHTML: ');
|
||||
console.log(document.body.outerHTML);
|
||||
|
||||
console.log('document.outerHTML: ');
|
||||
console.log(document.outerHTML);
|
1170
bower_components/jsdom/example/ender/ender.js
vendored
Normal file
1170
bower_components/jsdom/example/ender/ender.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
bower_components/jsdom/example/ender/run.js
vendored
Normal file
10
bower_components/jsdom/example/ender/run.js
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
var jsdom = require("../../lib/jsdom");
|
||||
|
||||
jsdom.env("<html><body></body></html>", ["ender.js"], function(errors, window) {
|
||||
if (errors) {
|
||||
console.error(errors);
|
||||
return;
|
||||
}
|
||||
window.$('body').append("<div class='testing'>Hello World, It works!</div>");
|
||||
console.log(window.$(".testing").text());
|
||||
});
|
9
bower_components/jsdom/example/jquery/run.js
vendored
Normal file
9
bower_components/jsdom/example/jquery/run.js
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
var jsdom = require("../../lib/jsdom");
|
||||
var window = jsdom.jsdom().parentWindow;
|
||||
|
||||
jsdom.jQueryify(window, "http://code.jquery.com/jquery.js", function() {
|
||||
window.jQuery("body").append("<div class='testing'>Hello World, It works!</div>");
|
||||
console.log(window.jQuery(".testing").text());
|
||||
});
|
243
bower_components/jsdom/example/node-xml/example.xml
vendored
Normal file
243
bower_components/jsdom/example/node-xml/example.xml
vendored
Normal file
@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!-- Edited by XMLSpy® -->
|
||||
<CATALOG>
|
||||
<CD>
|
||||
<TITLE>Empire Burlesque</TITLE>
|
||||
<ARTIST>Bob Dylan</ARTIST>
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
<COMPANY>Columbia</COMPANY>
|
||||
|
||||
<PRICE>10.90</PRICE>
|
||||
<YEAR>1985</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Hide your heart</TITLE>
|
||||
<ARTIST>Bonnie Tyler</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
|
||||
<COMPANY>CBS Records</COMPANY>
|
||||
<PRICE>9.90</PRICE>
|
||||
<YEAR>1988</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Greatest Hits</TITLE>
|
||||
<ARTIST>Dolly Parton</ARTIST>
|
||||
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
<COMPANY>RCA</COMPANY>
|
||||
<PRICE>9.90</PRICE>
|
||||
<YEAR>1982</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Still got the blues</TITLE>
|
||||
|
||||
<ARTIST>Gary Moore</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Virgin records</COMPANY>
|
||||
<PRICE>10.20</PRICE>
|
||||
<YEAR>1990</YEAR>
|
||||
</CD>
|
||||
|
||||
<CD>
|
||||
<TITLE>Eros</TITLE>
|
||||
<ARTIST>Eros Ramazzotti</ARTIST>
|
||||
<COUNTRY>EU</COUNTRY>
|
||||
<COMPANY>BMG</COMPANY>
|
||||
<PRICE>9.90</PRICE>
|
||||
|
||||
<YEAR>1997</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>One night only</TITLE>
|
||||
<ARTIST>Bee Gees</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Polydor</COMPANY>
|
||||
|
||||
<PRICE>10.90</PRICE>
|
||||
<YEAR>1998</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Sylvias Mother</TITLE>
|
||||
<ARTIST>Dr.Hook</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
|
||||
<COMPANY>CBS</COMPANY>
|
||||
<PRICE>8.10</PRICE>
|
||||
<YEAR>1973</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Maggie May</TITLE>
|
||||
<ARTIST>Rod Stewart</ARTIST>
|
||||
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Pickwick</COMPANY>
|
||||
<PRICE>8.50</PRICE>
|
||||
<YEAR>1990</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Romanza</TITLE>
|
||||
|
||||
<ARTIST>Andrea Bocelli</ARTIST>
|
||||
<COUNTRY>EU</COUNTRY>
|
||||
<COMPANY>Polydor</COMPANY>
|
||||
<PRICE>10.80</PRICE>
|
||||
<YEAR>1996</YEAR>
|
||||
</CD>
|
||||
|
||||
<CD>
|
||||
<TITLE>When a man loves a woman</TITLE>
|
||||
<ARTIST>Percy Sledge</ARTIST>
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
<COMPANY>Atlantic</COMPANY>
|
||||
<PRICE>8.70</PRICE>
|
||||
|
||||
<YEAR>1987</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Black angel</TITLE>
|
||||
<ARTIST>Savage Rose</ARTIST>
|
||||
<COUNTRY>EU</COUNTRY>
|
||||
<COMPANY>Mega</COMPANY>
|
||||
|
||||
<PRICE>10.90</PRICE>
|
||||
<YEAR>1995</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>1999 Grammy Nominees</TITLE>
|
||||
<ARTIST>Many</ARTIST>
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
|
||||
<COMPANY>Grammy</COMPANY>
|
||||
<PRICE>10.20</PRICE>
|
||||
<YEAR>1999</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>For the good times</TITLE>
|
||||
<ARTIST>Kenny Rogers</ARTIST>
|
||||
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Mucik Master</COMPANY>
|
||||
<PRICE>8.70</PRICE>
|
||||
<YEAR>1995</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Big Willie style</TITLE>
|
||||
|
||||
<ARTIST>Will Smith</ARTIST>
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
<COMPANY>Columbia</COMPANY>
|
||||
<PRICE>9.90</PRICE>
|
||||
<YEAR>1997</YEAR>
|
||||
</CD>
|
||||
|
||||
<CD>
|
||||
<TITLE>Tupelo Honey</TITLE>
|
||||
<ARTIST>Van Morrison</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Polydor</COMPANY>
|
||||
<PRICE>8.20</PRICE>
|
||||
|
||||
<YEAR>1971</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Soulsville</TITLE>
|
||||
<ARTIST>Jorn Hoel</ARTIST>
|
||||
<COUNTRY>Norway</COUNTRY>
|
||||
<COMPANY>WEA</COMPANY>
|
||||
|
||||
<PRICE>7.90</PRICE>
|
||||
<YEAR>1996</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>The very best of</TITLE>
|
||||
<ARTIST>Cat Stevens</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
|
||||
<COMPANY>Island</COMPANY>
|
||||
<PRICE>8.90</PRICE>
|
||||
<YEAR>1990</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Stop</TITLE>
|
||||
<ARTIST>Sam Brown</ARTIST>
|
||||
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>A and M</COMPANY>
|
||||
<PRICE>8.90</PRICE>
|
||||
<YEAR>1988</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Bridge of Spies</TITLE>
|
||||
|
||||
<ARTIST>T'Pau</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Siren</COMPANY>
|
||||
<PRICE>7.90</PRICE>
|
||||
<YEAR>1987</YEAR>
|
||||
</CD>
|
||||
|
||||
<CD>
|
||||
<TITLE>Private Dancer</TITLE>
|
||||
<ARTIST>Tina Turner</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>Capitol</COMPANY>
|
||||
<PRICE>8.90</PRICE>
|
||||
|
||||
<YEAR>1983</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Midt om natten</TITLE>
|
||||
<ARTIST>Kim Larsen</ARTIST>
|
||||
<COUNTRY>EU</COUNTRY>
|
||||
<COMPANY>Medley</COMPANY>
|
||||
|
||||
<PRICE>7.80</PRICE>
|
||||
<YEAR>1983</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Pavarotti Gala Concert</TITLE>
|
||||
<ARTIST>Luciano Pavarotti</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
|
||||
<COMPANY>DECCA</COMPANY>
|
||||
<PRICE>9.90</PRICE>
|
||||
<YEAR>1991</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>The dock of the bay</TITLE>
|
||||
<ARTIST>Otis Redding</ARTIST>
|
||||
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
<COMPANY>Atlantic</COMPANY>
|
||||
<PRICE>7.90</PRICE>
|
||||
<YEAR>1987</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Picture book</TITLE>
|
||||
|
||||
<ARTIST>Simply Red</ARTIST>
|
||||
<COUNTRY>EU</COUNTRY>
|
||||
<COMPANY>Elektra</COMPANY>
|
||||
<PRICE>7.20</PRICE>
|
||||
<YEAR>1985</YEAR>
|
||||
</CD>
|
||||
|
||||
<CD>
|
||||
<TITLE>Red</TITLE>
|
||||
<ARTIST>The Communards</ARTIST>
|
||||
<COUNTRY>UK</COUNTRY>
|
||||
<COMPANY>London</COMPANY>
|
||||
<PRICE>7.80</PRICE>
|
||||
|
||||
<YEAR>1987</YEAR>
|
||||
</CD>
|
||||
<CD>
|
||||
<TITLE>Unchain my heart</TITLE>
|
||||
<ARTIST>Joe Cocker</ARTIST>
|
||||
<COUNTRY>USA</COUNTRY>
|
||||
<COMPANY>EMI</COMPANY>
|
||||
|
||||
<PRICE>8.20</PRICE>
|
||||
<YEAR>1987</YEAR>
|
||||
</CD>
|
||||
</CATALOG>
|
45
bower_components/jsdom/example/node-xml/run.js
vendored
Normal file
45
bower_components/jsdom/example/node-xml/run.js
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
var dom = require("../../lib/jsdom/level1/core").dom.level1.core;
|
||||
|
||||
// git clone git://github.com/robrighter/node-xml.git into ~/.node_libraries
|
||||
var xml = require("node-xml/lib/node-xml");
|
||||
|
||||
var doc = new dom.Document();
|
||||
var currentElement = doc;
|
||||
var totalElements = 0;
|
||||
var parser = new xml.SaxParser(function(cb) {
|
||||
cb.onStartDocument(function() {
|
||||
|
||||
});
|
||||
cb.onEndDocument(function() {
|
||||
console.log((doc.getElementsByTagName("*").length === totalElements) ? "success" : "fail");
|
||||
});
|
||||
cb.onStartElementNS(function(elem, attrs, prefix, uri, namespaces) {
|
||||
totalElements++;
|
||||
var element = doc.createElement(elem);
|
||||
currentElement.appendChild(element);
|
||||
currentElement = element;
|
||||
console.log("=> Started: " + elem + " uri="+uri +" (Attributes: " + JSON.stringify(attrs) + " )");
|
||||
});
|
||||
cb.onEndElementNS(function(elem, prefix, uri) {
|
||||
currentElement = currentElement.parentNode;
|
||||
console.log("<= End: " + elem + " uri="+uri + "\n");
|
||||
});
|
||||
cb.onCharacters(function(chars) {
|
||||
|
||||
});
|
||||
cb.onCdata(function(cdata) {
|
||||
console.log('<CDATA>'+cdata+"</CDATA>");
|
||||
});
|
||||
cb.onComment(function(msg) {
|
||||
console.log('<COMMENT>'+msg+"</COMMENT>");
|
||||
});
|
||||
cb.onWarning(function(msg) {
|
||||
console.log('<WARNING>'+msg+"</WARNING>");
|
||||
});
|
||||
cb.onError(function(msg) {
|
||||
console.log('<ERROR>'+JSON.stringify(msg)+"</ERROR>");
|
||||
});
|
||||
});
|
||||
|
||||
//example read from file
|
||||
parser.parseFile("example.xml");
|
742
bower_components/jsdom/example/pure/pure.js
vendored
Normal file
742
bower_components/jsdom/example/pure/pure.js
vendored
Normal file
@ -0,0 +1,742 @@
|
||||
/*!
|
||||
PURE Unobtrusive Rendering Engine for HTML
|
||||
|
||||
Licensed under the MIT licenses.
|
||||
More information at: http://www.opensource.org
|
||||
|
||||
Copyright (c) 2010 Michael Cvilic - BeeBole.com
|
||||
|
||||
Thanks to Rog Peppe for the functional JS jump
|
||||
revision: 2.33
|
||||
*/
|
||||
exports.pureInit = function(window, document) {
|
||||
var $p, pure = $p = function(){
|
||||
var sel = arguments[0],
|
||||
ctxt = false;
|
||||
|
||||
if(typeof sel === 'string'){
|
||||
ctxt = arguments[1] || false;
|
||||
}
|
||||
return $p.core(sel, ctxt);
|
||||
};
|
||||
|
||||
$p.core = function(sel, ctxt, plugins){
|
||||
//get an instance of the plugins
|
||||
var plugins = getPlugins(),
|
||||
templates = [];
|
||||
|
||||
//search for the template node(s)
|
||||
switch(typeof sel){
|
||||
case 'string':
|
||||
templates = plugins.find(ctxt || document, sel);
|
||||
if(templates.length === 0) {
|
||||
error('The template "' + sel + '" was not found');
|
||||
}
|
||||
break;
|
||||
case 'undefined':
|
||||
error('The template root is undefined, check your selector');
|
||||
break;
|
||||
default:
|
||||
templates = [sel];
|
||||
}
|
||||
|
||||
for(var i = 0, ii = templates.length; i < ii; i++){
|
||||
plugins[i] = templates[i];
|
||||
}
|
||||
plugins.length = ii;
|
||||
|
||||
// set the signature string that will be replaced at render time
|
||||
var Sig = '_s' + Math.floor( Math.random() * 1000000 ) + '_',
|
||||
// another signature to prepend to attributes and avoid checks: style, height, on[events]...
|
||||
attPfx = '_a' + Math.floor( Math.random() * 1000000 ) + '_',
|
||||
// rx to parse selectors, e.g. "+tr.foo[class]"
|
||||
selRx = /^(\+)?([^\@\+]+)?\@?([^\+]+)?(\+)?$/,
|
||||
// set automatically attributes for some tags
|
||||
autoAttr = {
|
||||
IMG:'src',
|
||||
INPUT:'value'
|
||||
};
|
||||
|
||||
return plugins;
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
core functions
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
|
||||
// error utility
|
||||
function error(e){
|
||||
window.alert(e);
|
||||
if(typeof console !== 'undefined'){
|
||||
console.log(e);
|
||||
debugger;
|
||||
}
|
||||
throw('pure error: ' + e);
|
||||
}
|
||||
|
||||
//return a new instance of plugins
|
||||
function getPlugins(){
|
||||
var plugins = $p.plugins,
|
||||
f = function(){};
|
||||
f.prototype = plugins;
|
||||
|
||||
// do not overwrite functions if external definition
|
||||
f.prototype.compile = plugins.compile || compile;
|
||||
f.prototype.render = plugins.render || render;
|
||||
f.prototype.autoRender = plugins.autoRender || autoRender;
|
||||
f.prototype.find = plugins.find || find;
|
||||
|
||||
// give the compiler and the error handling to the plugin context
|
||||
f.prototype._compiler = compiler;
|
||||
f.prototype._error = error;
|
||||
|
||||
return new f();
|
||||
}
|
||||
|
||||
// returns the outer HTML of a node
|
||||
function outerHTML(node){
|
||||
// if IE take the internal method otherwise build one
|
||||
return node.outerHTML || (
|
||||
function(n){
|
||||
var div = document.createElement('div'), h;
|
||||
div.appendChild( n.cloneNode(true) );
|
||||
h = div.innerHTML;
|
||||
div = null;
|
||||
return h;
|
||||
})(node);
|
||||
}
|
||||
|
||||
// check if the argument is an array
|
||||
function isArray(o){
|
||||
return Object.prototype.toString.call( o ) === "[object Array]";
|
||||
}
|
||||
|
||||
// returns the string generator function
|
||||
function wrapquote(qfn, f){
|
||||
return function(ctxt){
|
||||
return qfn('' + f.call(ctxt.context, ctxt));
|
||||
};
|
||||
}
|
||||
|
||||
// convert a JSON HTML structure to a dom node and returns the leaf
|
||||
function domify(ns, pa){
|
||||
pa = pa || document.createDocumentFragment();
|
||||
var nn, leaf;
|
||||
for(var n in ns){
|
||||
nn = document.createElement(n);
|
||||
pa.appendChild(nn);
|
||||
if(typeof ns[n] === 'object'){
|
||||
leaf = domify(ns[n], nn);
|
||||
}else{
|
||||
leaf = document.createElement(ns[n]);
|
||||
nn.appendChild(leaf);
|
||||
}
|
||||
}
|
||||
return leaf;
|
||||
};
|
||||
|
||||
// default find using querySelector when available on the browser
|
||||
function find(n, sel){
|
||||
if(typeof n === 'string'){
|
||||
sel = n;
|
||||
n = false;
|
||||
}
|
||||
if(typeof document.querySelectorAll !== 'undefined'){
|
||||
return (n||document).querySelectorAll( sel );
|
||||
}else{
|
||||
error('You can test PURE standalone with: iPhone, FF3.5+, Safari4+ and IE8+\n\nTo run PURE on your browser, you need a JS library/framework with a CSS selector engine');
|
||||
}
|
||||
}
|
||||
|
||||
// create a function that concatenates constant string
|
||||
// sections (given in parts) and the results of called
|
||||
// functions to fill in the gaps between parts (fns).
|
||||
// fns[n] fills in the gap between parts[n-1] and parts[n];
|
||||
// fns[0] is unused.
|
||||
// this is the inner template evaluation loop.
|
||||
function concatenator(parts, fns){
|
||||
return function(ctxt){
|
||||
var strs = [ parts[ 0 ] ],
|
||||
n = parts.length,
|
||||
fnVal, pVal, attLine, pos;
|
||||
|
||||
for(var i = 1; i < n; i++){
|
||||
fnVal = fns[i]( ctxt );
|
||||
pVal = parts[i];
|
||||
|
||||
// if the value is empty and attribute, remove it
|
||||
if(fnVal === ''){
|
||||
attLine = strs[ strs.length - 1 ];
|
||||
if( ( pos = attLine.search( /[\w]+=\"?$/ ) ) > -1){
|
||||
strs[ strs.length - 1 ] = attLine.substring( 0, pos );
|
||||
pVal = pVal.substr( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
strs[ strs.length ] = fnVal;
|
||||
strs[ strs.length ] = pVal;
|
||||
}
|
||||
return strs.join('');
|
||||
};
|
||||
}
|
||||
|
||||
// parse and check the loop directive
|
||||
function parseloopspec(p){
|
||||
var m = p.match( /^(\w+)\s*<-\s*(\S+)?$/ );
|
||||
if(m === null){
|
||||
error('bad loop spec: "' + p + '"');
|
||||
}
|
||||
if(m[1] === 'item'){
|
||||
error('"item<-..." is a reserved word for the current running iteration.\n\nPlease choose another name for your loop.');
|
||||
}
|
||||
if( !m[2] || (m[2] && (/context/i).test(m[2]))){ //undefined or space(IE)
|
||||
m[2] = function(ctxt){return ctxt.context;};
|
||||
}
|
||||
return {name: m[1], sel: m[2]};
|
||||
}
|
||||
|
||||
// parse a data selector and return a function that
|
||||
// can traverse the data accordingly, given a context.
|
||||
function dataselectfn(sel){
|
||||
if(typeof(sel) === 'function'){
|
||||
return sel;
|
||||
}
|
||||
//check for a valid js variable name with hyphen(for properties only) and $
|
||||
var m = sel.match(/^[a-zA-Z$_][\w$]*(\.[\w$-]*[^\.])*$/);
|
||||
if(m === null){
|
||||
var found = false, s = sel, parts = [], pfns = [], i = 0, retStr;
|
||||
// check if literal
|
||||
if(/\'|\"/.test( s.charAt(0) )){
|
||||
if(/\'|\"/.test( s.charAt(s.length-1) )){
|
||||
retStr = s.substring(1, s.length-1);
|
||||
return function(){ return retStr; };
|
||||
}
|
||||
}else{
|
||||
// check if literal + #{var}
|
||||
while((m = s.match(/#\{([^{}]+)\}/)) !== null){
|
||||
found = true;
|
||||
parts[i++] = s.slice(0, m.index);
|
||||
pfns[i] = dataselectfn(m[1]);
|
||||
s = s.slice(m.index + m[0].length, s.length);
|
||||
}
|
||||
}
|
||||
if(!found){
|
||||
error('bad data selector syntax: ' + sel);
|
||||
}
|
||||
parts[i] = s;
|
||||
return concatenator(parts, pfns);
|
||||
}
|
||||
m = sel.split('.');
|
||||
return function(ctxt){
|
||||
var data = ctxt.context;
|
||||
if(!data){
|
||||
return '';
|
||||
}
|
||||
var v = ctxt[m[0]],
|
||||
i = 0;
|
||||
if(v && v.item){
|
||||
data = v.item;
|
||||
i += 1;
|
||||
}
|
||||
var n = m.length;
|
||||
for(; i < n; i++){
|
||||
if(!data){break;}
|
||||
data = data[m[i]];
|
||||
}
|
||||
return (!data && data !== 0) ? '':data;
|
||||
};
|
||||
}
|
||||
|
||||
// wrap in an object the target node/attr and their properties
|
||||
function gettarget(dom, sel, isloop){
|
||||
var osel, prepend, selector, attr, append, target = [];
|
||||
if( typeof sel === 'string' ){
|
||||
osel = sel;
|
||||
var m = sel.match(selRx);
|
||||
if( !m ){
|
||||
error( 'bad selector syntax: ' + sel );
|
||||
}
|
||||
|
||||
prepend = m[1];
|
||||
selector = m[2];
|
||||
attr = m[3];
|
||||
append = m[4];
|
||||
|
||||
if(selector === '.' || ( !selector && attr ) ){
|
||||
target[0] = dom;
|
||||
}else{
|
||||
target = plugins.find(dom, selector);
|
||||
}
|
||||
if(!target || target.length === 0){
|
||||
return error('The node "' + sel + '" was not found in the template');
|
||||
}
|
||||
}else{
|
||||
// autoRender node
|
||||
prepend = sel.prepend;
|
||||
attr = sel.attr;
|
||||
append = sel.append;
|
||||
target = [dom];
|
||||
}
|
||||
|
||||
if( prepend || append ){
|
||||
if( prepend && append ){
|
||||
error('append/prepend cannot take place at the same time');
|
||||
}else if( isloop ){
|
||||
error('no append/prepend/replace modifiers allowed for loop target');
|
||||
}else if( append && isloop ){
|
||||
error('cannot append with loop (sel: ' + osel + ')');
|
||||
}
|
||||
}
|
||||
var setstr, getstr, quotefn, isStyle, isClass, attName;
|
||||
if(attr){
|
||||
isStyle = (/^style$/i).test(attr);
|
||||
isClass = (/^class$/i).test(attr);
|
||||
attName = isClass ? 'className' : attr;
|
||||
setstr = function(node, s) {
|
||||
node.setAttribute(attPfx + attr, s);
|
||||
if (attName in node && !isStyle) {
|
||||
node[attName] = '';
|
||||
}
|
||||
if (node.nodeType === 1) {
|
||||
node.removeAttribute(attr);
|
||||
isClass && node.removeAttribute(attName);
|
||||
}
|
||||
};
|
||||
if(isStyle) {
|
||||
getstr = function(node){ return node.style.cssText; };
|
||||
}else if(isClass) {
|
||||
getstr = function(node){ return node.className; };
|
||||
}else{
|
||||
getstr = function(node){ return node.getAttribute(attr); };
|
||||
}
|
||||
if (isStyle || isClass) {//IE no quotes special care
|
||||
quotefn = function(s){ return s.replace(/\"/g, '"'); };
|
||||
}else {
|
||||
quotefn = function(s){ return s.replace(/\"/g, '"').replace(/\s/g, ' '); };
|
||||
}
|
||||
}else{
|
||||
if(isloop){
|
||||
setstr = function(node, s){
|
||||
// we can have a null parent node
|
||||
// if we get overlapping targets.
|
||||
var pn = node.parentNode;
|
||||
if(pn){
|
||||
//replace node with s
|
||||
pn.insertBefore( document.createTextNode( s ), node.nextSibling );
|
||||
pn.removeChild( node );
|
||||
}
|
||||
};
|
||||
}else{
|
||||
getstr = function(node){
|
||||
return node.innerHTML;
|
||||
};
|
||||
setstr = function(node, s, ap){
|
||||
if(ap === true){
|
||||
node.innerHTML = s;
|
||||
}else{
|
||||
node.innerHTML = '';
|
||||
node.appendChild( document.createTextNode( s ));
|
||||
}
|
||||
};
|
||||
}
|
||||
quotefn = function(s){
|
||||
return s;
|
||||
};
|
||||
}
|
||||
var setfn;
|
||||
if(prepend){
|
||||
setfn = function(node, s){
|
||||
setstr( node, s + getstr( node ) , true);
|
||||
};
|
||||
}else if(append){
|
||||
setfn = function(node, s){
|
||||
setstr( node, getstr( node ) + s , true);
|
||||
};
|
||||
}else{
|
||||
setfn = function(node, s){
|
||||
setstr( node, s );
|
||||
};
|
||||
}
|
||||
return {attr: attr, nodes: target, set: setfn, sel: osel, quotefn: quotefn};
|
||||
}
|
||||
|
||||
function setsig(target, n){
|
||||
var sig = Sig + n + ':';
|
||||
for(var i = 0; i < target.nodes.length; i++){
|
||||
// could check for overlapping targets here.
|
||||
target.set( target.nodes[i], sig );
|
||||
}
|
||||
}
|
||||
|
||||
// read de loop data, and pass it to the inner rendering function
|
||||
function loopfn(name, dselect, inner, sorter){
|
||||
return function(ctxt){
|
||||
var a = dselect(ctxt),
|
||||
old = ctxt[name],
|
||||
temp = { items : a },
|
||||
strs = [],
|
||||
buildArg = function(idx, temp){
|
||||
ctxt.pos = temp.pos = idx;
|
||||
ctxt.item = temp.item = a[ idx ];
|
||||
ctxt.items = a;
|
||||
strs.push( inner.call(temp, ctxt ) );
|
||||
};
|
||||
ctxt[name] = temp;
|
||||
if( isArray(a) ){
|
||||
if(typeof sorter !== 'undefined'){
|
||||
a.sort(sorter);
|
||||
}
|
||||
//loop on array
|
||||
for(var i = 0, ii = a.length || 0; i < ii; i++){
|
||||
buildArg(i, temp);
|
||||
}
|
||||
}else{
|
||||
if(typeof sorter !== 'undefined'){
|
||||
error('sort is only available on arrays, not objects');
|
||||
}
|
||||
//loop on collections
|
||||
for(var prop in a){
|
||||
a.hasOwnProperty( prop ) && buildArg(prop, temp);
|
||||
}
|
||||
}
|
||||
|
||||
typeof old !== 'undefined' ? ctxt[name] = old : delete ctxt[name];
|
||||
return strs.join('');
|
||||
};
|
||||
}
|
||||
// generate the template for a loop node
|
||||
function loopgen(dom, sel, loop, fns){
|
||||
var already = false, ls, sorter, prop;
|
||||
for(prop in loop){
|
||||
if(loop.hasOwnProperty(prop)){
|
||||
if(prop === 'sort'){
|
||||
sorter = loop.sort;
|
||||
continue;
|
||||
}
|
||||
if(already){
|
||||
error('cannot have more than one loop on a target');
|
||||
}
|
||||
ls = prop;
|
||||
already = true;
|
||||
}
|
||||
}
|
||||
if(!ls){
|
||||
error('no loop spec');
|
||||
}
|
||||
var dsel = loop[ls];
|
||||
// if it's a simple data selector then we default to contents, not replacement.
|
||||
if(typeof(dsel) === 'string' || typeof(dsel) === 'function'){
|
||||
loop = {};
|
||||
loop[ls] = {root: dsel};
|
||||
return loopgen(dom, sel, loop, fns);
|
||||
}
|
||||
var spec = parseloopspec(ls),
|
||||
itersel = dataselectfn(spec.sel),
|
||||
target = gettarget(dom, sel, true),
|
||||
nodes = target.nodes;
|
||||
|
||||
for(i = 0; i < nodes.length; i++){
|
||||
var node = nodes[i],
|
||||
inner = compiler(node, dsel);
|
||||
fns[fns.length] = wrapquote(target.quotefn, loopfn(spec.name, itersel, inner, sorter));
|
||||
target.nodes = [node]; // N.B. side effect on target.
|
||||
setsig(target, fns.length - 1);
|
||||
}
|
||||
}
|
||||
|
||||
function getAutoNodes(n, data){
|
||||
var ns = n.getElementsByTagName('*'),
|
||||
an = [],
|
||||
openLoops = {a:[],l:{}},
|
||||
cspec,
|
||||
isNodeValue,
|
||||
i, ii, j, jj, ni, cs, cj;
|
||||
//for each node found in the template
|
||||
for(i = -1, ii = ns.length; i < ii; i++){
|
||||
ni = i > -1 ?ns[i]:n;
|
||||
if(ni.nodeType === 1 && ni.className !== ''){
|
||||
//when a className is found
|
||||
cs = ni.className.split(' ');
|
||||
// for each className
|
||||
for(j = 0, jj=cs.length;j<jj;j++){
|
||||
cj = cs[j];
|
||||
// check if it is related to a context property
|
||||
cspec = checkClass(cj, ni.tagName);
|
||||
// if so, store the node, plus the type of data
|
||||
if(cspec !== false){
|
||||
isNodeValue = (/nodevalue/i).test(cspec.attr);
|
||||
if(cspec.sel.indexOf('@') > -1 || isNodeValue){
|
||||
ni.className = ni.className.replace('@'+cspec.attr, '');
|
||||
if(isNodeValue){
|
||||
cspec.attr = false;
|
||||
}
|
||||
}
|
||||
an.push({n:ni, cspec:cspec});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return an;
|
||||
|
||||
function checkClass(c, tagName){
|
||||
// read the class
|
||||
var ca = c.match(selRx),
|
||||
attr = ca[3] || autoAttr[tagName],
|
||||
cspec = {prepend:!!ca[1], prop:ca[2], attr:attr, append:!!ca[4], sel:c},
|
||||
i, ii, loopi, loopil, val;
|
||||
// check in existing open loops
|
||||
for(i = openLoops.a.length-1; i >= 0; i--){
|
||||
loopi = openLoops.a[i];
|
||||
loopil = loopi.l[0];
|
||||
val = loopil && loopil[cspec.prop];
|
||||
if(typeof val !== 'undefined'){
|
||||
cspec.prop = loopi.p + '.' + cspec.prop;
|
||||
if(openLoops.l[cspec.prop] === true){
|
||||
val = val[0];
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
// not found check first level of data
|
||||
if(typeof val === 'undefined'){
|
||||
val = isArray(data) ? data[0][cspec.prop] : data[cspec.prop];
|
||||
// nothing found return
|
||||
if(typeof val === 'undefined'){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// set the spec for autoNode
|
||||
if(isArray(val)){
|
||||
openLoops.a.push( {l:val, p:cspec.prop} );
|
||||
openLoops.l[cspec.prop] = true;
|
||||
cspec.t = 'loop';
|
||||
}else{
|
||||
cspec.t = 'str';
|
||||
}
|
||||
return cspec;
|
||||
}
|
||||
}
|
||||
|
||||
// returns a function that, given a context argument,
|
||||
// will render the template defined by dom and directive.
|
||||
function compiler(dom, directive, data, ans){
|
||||
var fns = [];
|
||||
// autoRendering nodes parsing -> auto-nodes
|
||||
ans = ans || data && getAutoNodes(dom, data);
|
||||
if(data){
|
||||
var j, jj, cspec, n, target, nodes, itersel, node, inner;
|
||||
// for each auto-nodes
|
||||
while(ans.length > 0){
|
||||
cspec = ans[0].cspec;
|
||||
n = ans[0].n;
|
||||
ans.splice(0, 1);
|
||||
if(cspec.t === 'str'){
|
||||
// if the target is a value
|
||||
target = gettarget(n, cspec, false);
|
||||
setsig(target, fns.length);
|
||||
fns[fns.length] = wrapquote(target.quotefn, dataselectfn(cspec.prop));
|
||||
}else{
|
||||
// if the target is a loop
|
||||
itersel = dataselectfn(cspec.sel);
|
||||
target = gettarget(n, cspec, true);
|
||||
nodes = target.nodes;
|
||||
for(j = 0, jj = nodes.length; j < jj; j++){
|
||||
node = nodes[j];
|
||||
inner = compiler(node, false, data, ans);
|
||||
fns[fns.length] = wrapquote(target.quotefn, loopfn(cspec.sel, itersel, inner));
|
||||
target.nodes = [node];
|
||||
setsig(target, fns.length - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// read directives
|
||||
var target, dsel;
|
||||
for(var sel in directive){
|
||||
if(directive.hasOwnProperty(sel)){
|
||||
dsel = directive[sel];
|
||||
if(typeof(dsel) === 'function' || typeof(dsel) === 'string'){
|
||||
// set the value for the node/attr
|
||||
target = gettarget(dom, sel, false);
|
||||
setsig(target, fns.length);
|
||||
fns[fns.length] = wrapquote(target.quotefn, dataselectfn(dsel));
|
||||
}else{
|
||||
// loop on node
|
||||
loopgen(dom, sel, dsel, fns);
|
||||
}
|
||||
}
|
||||
}
|
||||
// convert node to a string
|
||||
var h = outerHTML(dom), pfns = [];
|
||||
// IE adds an unremovable "selected, value" attribute
|
||||
// hard replace while waiting for a better solution
|
||||
h = h.replace(/<([^>]+)\s(value\=""|selected)\s?([^>]*)>/ig, "<$1 $3>");
|
||||
|
||||
// remove attribute prefix
|
||||
h = h.split(attPfx).join('');
|
||||
|
||||
// slice the html string at "Sig"
|
||||
var parts = h.split( Sig ), p;
|
||||
// for each slice add the return string of
|
||||
for(var i = 1; i < parts.length; i++){
|
||||
p = parts[i];
|
||||
// part is of the form "fn-number:..." as placed there by setsig.
|
||||
pfns[i] = fns[ parseInt(p, 10) ];
|
||||
parts[i] = p.substring( p.indexOf(':') + 1 );
|
||||
}
|
||||
return concatenator(parts, pfns);
|
||||
}
|
||||
// compile the template with directive
|
||||
// if a context is passed, the autoRendering is triggered automatically
|
||||
// return a function waiting the data as argument
|
||||
function compile(directive, ctxt, template){
|
||||
var rfn = compiler( ( template || this[0] ).cloneNode(true), directive, ctxt);
|
||||
return function(context){
|
||||
return rfn({context:context});
|
||||
};
|
||||
}
|
||||
//compile with the directive as argument
|
||||
// run the template function on the context argument
|
||||
// return an HTML string
|
||||
// should replace the template and return this
|
||||
function render(ctxt, directive){
|
||||
var fn = typeof directive === 'function' ? directive : plugins.compile( directive, false, this[0] );
|
||||
for(var i = 0, ii = this.length; i < ii; i++){
|
||||
this[i] = replaceWith( this[i], fn( ctxt, false ));
|
||||
}
|
||||
context = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
// compile the template with autoRender
|
||||
// run the template function on the context argument
|
||||
// return an HTML string
|
||||
function autoRender(ctxt, directive){
|
||||
var fn = plugins.compile( directive, ctxt, this[0] );
|
||||
for(var i = 0, ii = this.length; i < ii; i++){
|
||||
this[i] = replaceWith( this[i], fn( ctxt, false));
|
||||
}
|
||||
context = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
function replaceWith(elm, html){
|
||||
var tagName = elm.tagName, ne, pa, ep, parent = {TABLE:{}};
|
||||
if((/TD|TR|TH/).test(tagName)){
|
||||
var parents = { TR:{TABLE:'TBODY'}, TD:{TABLE:{TBODY:'TR'}}, TH:{TABLE:{THEAD:'TR'}} };
|
||||
pa = domify( parents[ tagName ] );
|
||||
}else if( ( /TBODY|THEAD|TFOOT/ ).test( tagName )){
|
||||
pa = document.createElement('TABLE');
|
||||
}else{
|
||||
pa = document.createElement('SPAN');
|
||||
}
|
||||
|
||||
ep = elm.parentNode;
|
||||
// avoid IE mem leak
|
||||
ep.insertBefore(pa, elm);
|
||||
ep.removeChild(elm);
|
||||
// pa.style.display = 'none';
|
||||
pa.innerHTML = html;
|
||||
ne = pa.firstChild;
|
||||
ep.insertBefore(ne, pa);
|
||||
ep.removeChild(pa);
|
||||
elm = ne;
|
||||
|
||||
pa = ne = ep = null;
|
||||
return elm;
|
||||
}
|
||||
};
|
||||
|
||||
$p.plugins = {};
|
||||
|
||||
$p.libs = {
|
||||
dojo:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
return dojo.query(sel, n);
|
||||
};
|
||||
}
|
||||
},
|
||||
domassistant:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
return $(n).cssSelect(sel);
|
||||
};
|
||||
}
|
||||
DOMAssistant.attach({
|
||||
publicMethods : [ 'compile', 'render', 'autoRender'],
|
||||
compile:function(directive, ctxt){ return $p(this).compile(directive, ctxt); },
|
||||
render:function(ctxt, directive){ return $( $p(this).render(ctxt, directive) )[0]; },
|
||||
autoRender:function(ctxt, directive){ return $( $p(this).autoRender(ctxt, directive) )[0]; }
|
||||
});
|
||||
},
|
||||
jquery:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
return $(n).find(sel);
|
||||
};
|
||||
}
|
||||
jQuery.fn.extend({
|
||||
compile:function(directive, ctxt){ return $p(this[0]).compile(directive, ctxt); },
|
||||
render:function(ctxt, directive){ return jQuery( $p( this[0] ).render( ctxt, directive ) ); },
|
||||
autoRender:function(ctxt, directive){ return jQuery( $p( this[0] ).autoRender( ctxt, directive ) ); }
|
||||
});
|
||||
},
|
||||
mootools:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
return $(n).getElements(sel);
|
||||
};
|
||||
}
|
||||
Element.implement({
|
||||
compile:function(directive, ctxt){ return $p(this).compile(directive, ctxt); },
|
||||
render:function(ctxt, directive){ return $p(this).render(ctxt, directive); },
|
||||
autoRender:function(ctxt, directive){ return $p(this).autoRender(ctxt, directive); }
|
||||
});
|
||||
},
|
||||
prototype:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
n = n === document ? n.body : n;
|
||||
return typeof n === 'string' ? $$(n) : $(n).select(sel);
|
||||
};
|
||||
}
|
||||
Element.addMethods({
|
||||
compile:function(element, directive, ctxt){ return $p(element).compile(directive, ctxt); },
|
||||
render:function(element, ctxt, directive){ return $p(element).render(ctxt, directive); },
|
||||
autoRender:function(element, ctxt, directive){ return $p(element).autoRender(ctxt, directive); }
|
||||
});
|
||||
},
|
||||
sizzle:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
return window.Sizzle(sel, n);
|
||||
};
|
||||
}
|
||||
},
|
||||
sly:function(){
|
||||
if(typeof document.querySelector === 'undefined'){
|
||||
$p.plugins.find = function(n, sel){
|
||||
return Sly(sel, n);
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// get lib specifics if available
|
||||
(function(){
|
||||
var libkey =
|
||||
typeof dojo !== 'undefined' && 'dojo' ||
|
||||
typeof DOMAssistant !== 'undefined' && 'domassistant' ||
|
||||
typeof jQuery !== 'undefined' && 'jquery' ||
|
||||
typeof MooTools !== 'undefined' && 'mootools' ||
|
||||
typeof Prototype !== 'undefined' && 'prototype' ||
|
||||
typeof window.Sizzle !== 'undefined' && 'sizzle' ||
|
||||
typeof Sly !== 'undefined' && 'sly';
|
||||
|
||||
libkey && $p.libs[libkey]();
|
||||
})();
|
||||
return pure;
|
||||
};
|
||||
|
96
bower_components/jsdom/example/pure/run.js
vendored
Normal file
96
bower_components/jsdom/example/pure/run.js
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
var browser = require("../../lib/jsdom/browser/index");
|
||||
var dom = new browser.browserAugmentation(require("../../lib/jsdom/level2/html").dom.level2.html);
|
||||
var sax = require("./sax");
|
||||
var util = require('util');
|
||||
|
||||
|
||||
// TODO: change this example to use pluggable parser
|
||||
|
||||
/**
|
||||
setup innerHTML setter
|
||||
*/
|
||||
dom.Element.prototype.__defineSetter__('innerHTML', function(html) {
|
||||
|
||||
|
||||
// first remove all the children
|
||||
for (var i=this.childNodes.length-1; i>=0;i--)
|
||||
{
|
||||
this.removeChild(this.childNodes.item(i));
|
||||
}
|
||||
|
||||
var currentElement = this, currentLevel = 0;
|
||||
|
||||
/**
|
||||
setup sax parser
|
||||
*/
|
||||
parser = sax.parser(false);
|
||||
|
||||
parser.onerror = function (e) {
|
||||
|
||||
};
|
||||
parser.ontext = function (t) {
|
||||
|
||||
var ownerDocument = currentElement.ownerDocument || currentElement;
|
||||
var newText = ownerDocument.createTextNode(t);
|
||||
currentElement.appendChild(newText);
|
||||
};
|
||||
parser.onopentag = function (node) {
|
||||
var nodeName = node.name.toLowerCase(),
|
||||
document = currentElement.ownerDocument || currentElement,
|
||||
newElement = document.createElement(nodeName),
|
||||
i = 0,
|
||||
length = (node.attributes && node.attributes.length) ?
|
||||
node.attributes.length :
|
||||
0;
|
||||
|
||||
for (i in node.attributes)
|
||||
{
|
||||
if (node.attributes.hasOwnProperty(i)) {
|
||||
newElement.setAttribute(i, node.attributes[i]);
|
||||
}
|
||||
}
|
||||
currentElement.appendChild(newElement);
|
||||
currentElement = newElement;
|
||||
};
|
||||
parser.onclosetag = function(node) {
|
||||
currentElement = currentElement.parentNode;
|
||||
}
|
||||
|
||||
parser.write(html).close();
|
||||
});
|
||||
|
||||
|
||||
|
||||
var doc = new dom.Document("html");
|
||||
|
||||
var implementation = new dom.DOMImplementation(doc, {
|
||||
"HTML" : "1.0",
|
||||
"DisableLiveLists" : "1.0"
|
||||
});
|
||||
|
||||
var notations = new dom.NotationNodeMap(
|
||||
doc,
|
||||
doc.createNotationNode("notation1","notation1File", null),
|
||||
doc.createNotationNode("notation2",null, "notation2File")
|
||||
);
|
||||
|
||||
var entities = new dom.EntityNodeMap(doc);
|
||||
|
||||
var doctype = new dom.DocumentType(doc, "html", entities, notations);
|
||||
doc.doctype = doctype;
|
||||
doc.implementation = implementation;
|
||||
|
||||
doc.innerHTML = '<html><head></head><body><div class="who"></div></body></html>';
|
||||
|
||||
var window = {
|
||||
alert : function() { console.log(util.inspect(arguments)); },
|
||||
document : doc
|
||||
};
|
||||
|
||||
window.Sizzle = require("../sizzle/sizzle").sizzleInit(window, doc);
|
||||
var $ = require("./pure").pureInit(window, doc);
|
||||
$("div").autoRender({"who":"Hello Wrrrld"});
|
||||
console.log(doc.innerHTML);
|
||||
|
||||
|
||||
|
11
bower_components/jsdom/example/pure/sax-test.js
vendored
Normal file
11
bower_components/jsdom/example/pure/sax-test.js
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
var util = require("util"),
|
||||
sax = require("./sax");
|
||||
|
||||
|
||||
parser = sax.parser(false);
|
||||
|
||||
sax.EVENTS.forEach(function (ev) {
|
||||
parser["on" + ev] = function() { console.log(util.inspect(arguments)); };
|
||||
});
|
||||
|
||||
parser.write("<span>Welcome,</span> to monkey land").close();
|
535
bower_components/jsdom/example/pure/sax.js
vendored
Normal file
535
bower_components/jsdom/example/pure/sax.js
vendored
Normal file
@ -0,0 +1,535 @@
|
||||
var sax = exports;
|
||||
sax.parser = function (strict, opt) { return new SAXParser(strict, opt) };
|
||||
sax.SAXParser = SAXParser;
|
||||
|
||||
function SAXParser (strict, opt) {
|
||||
this.c = this.comment = this.sgmlDecl =
|
||||
this.textNode = this.tagName = this.doctype =
|
||||
this.procInstName = this.procInstBody = this.entity =
|
||||
this.attribName = this.attribValue = this.q =
|
||||
this.cdata = this.sgmlDecl = "";
|
||||
this.opt = opt || {};
|
||||
this.tagCase = this.opt.lowercasetags ? "toLowerCase" : "toUpperCase";
|
||||
this.tags = [];
|
||||
this.closed = this.closedRoot = this.sawRoot = false;
|
||||
this.tag = this.error = null;
|
||||
this.strict = !!strict;
|
||||
this.state = S.BEGIN;
|
||||
this.ENTITIES = Object.create(sax.ENTITIES);
|
||||
|
||||
// just for error reporting
|
||||
this.position = this.line = this.column = 0;
|
||||
emit(this, "onready");
|
||||
}
|
||||
SAXParser.prototype = {
|
||||
write : write,
|
||||
resume : function () { this.error = null; return this },
|
||||
close : function () { return this.write(null) },
|
||||
}
|
||||
|
||||
// character classes and tokens
|
||||
var whitespace = "\n\t ",
|
||||
// this really needs to be replaced with character classes.
|
||||
// XML allows all manner of ridiculous numbers and digits.
|
||||
number = "0124356789",
|
||||
letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
// (Letter | '_' | ':')
|
||||
nameStart = letter+"_:",
|
||||
nameBody = nameStart+number+"-.",
|
||||
quote = "'\"",
|
||||
entity = number+letter+"#",
|
||||
CDATA = "[CDATA[",
|
||||
DOCTYPE = "DOCTYPE";
|
||||
function is (charclass, c) { return charclass.indexOf(c) !== -1 }
|
||||
function not (charclass, c) { return !is(charclass, c) }
|
||||
|
||||
var S = 0;
|
||||
sax.STATE =
|
||||
{ BEGIN : S++
|
||||
, TEXT : S++ // general stuff
|
||||
, TEXT_ENTITY : S++ // & and such.
|
||||
, OPEN_WAKA : S++ // <
|
||||
, SGML_DECL : S++ // <!BLARG
|
||||
, SGML_DECL_QUOTED : S++ // <!BLARG foo "bar
|
||||
, DOCTYPE : S++ // <!DOCTYPE
|
||||
, DOCTYPE_QUOTED : S++ // <!DOCTYPE "//blah
|
||||
, DOCTYPE_DTD : S++ // <!DOCTYPE "//blah" [ ...
|
||||
, DOCTYPE_DTD_QUOTED : S++ // <!DOCTYPE "//blah" [ "foo
|
||||
, COMMENT_STARTING : S++ // <!-
|
||||
, COMMENT : S++ // <!--
|
||||
, COMMENT_ENDING : S++ // <!-- blah -
|
||||
, COMMENT_ENDED : S++ // <!-- blah --
|
||||
, CDATA : S++ // <![CDATA[ something
|
||||
, CDATA_ENDING : S++ // ]
|
||||
, CDATA_ENDING_2 : S++ // ]]
|
||||
, PROC_INST : S++ // <?hi
|
||||
, PROC_INST_BODY : S++ // <?hi there
|
||||
, PROC_INST_QUOTED : S++ // <?hi there
|
||||
, PROC_INST_ENDING : S++ // <?hi there ?
|
||||
, OPEN_TAG : S++ // <strong
|
||||
, OPEN_TAG_SLASH : S++ // <strong /
|
||||
, ATTRIB : S++ // <a
|
||||
, ATTRIB_NAME : S++ // <a foo
|
||||
, ATTRIB_NAME_SAW_WHITE : S++ // <a foo _
|
||||
, ATTRIB_VALUE : S++ // <a foo="bar
|
||||
, ATTRIB_VALUE_QUOTED : S++ // <a foo="bar
|
||||
, ATTRIB_VALUE_UNQUOTED : S++ // <a foo="bar
|
||||
, ATTRIB_VALUE_ENTITY_Q : S++ // <foo bar="""
|
||||
, ATTRIB_VALUE_ENTITY_U : S++ // <foo bar="
|
||||
, CLOSE_TAG : S++ // </a
|
||||
, CLOSE_TAG_SAW_WHITE : S++ // </a >
|
||||
}
|
||||
|
||||
sax.ENTITIES =
|
||||
{ "apos" : "'"
|
||||
, "quot" : '"'
|
||||
, "amp" : "&"
|
||||
, "gt" : ">"
|
||||
, "lt" : "<"
|
||||
}
|
||||
|
||||
for (var S in sax.STATE) sax.STATE[sax.STATE[S]] = S;
|
||||
|
||||
// shorthand
|
||||
S = sax.STATE;
|
||||
sax.EVENTS = [ // for discoverability.
|
||||
"text", "processinginstruction", "sgmldeclaration",
|
||||
"doctype", "comment", "attribute", "opentag", "closetag",
|
||||
"cdata", "error", "end", "ready" ];
|
||||
|
||||
function emit (parser, event, data) {
|
||||
parser[event] && parser[event](data);
|
||||
}
|
||||
function emitNode (parser, nodeType, data) {
|
||||
if (parser.textNode) closeText(parser);
|
||||
emit(parser, nodeType, data);
|
||||
}
|
||||
function closeText (parser) {
|
||||
parser.textNode = textopts(parser.opt, parser.textNode);
|
||||
if (parser.textNode) emit(parser, "ontext", parser.textNode);
|
||||
parser.textNode = "";
|
||||
}
|
||||
function textopts (opt, text) {
|
||||
if (opt.trim) text = text.trim();
|
||||
if (opt.normalize) text = text.replace(/\s+/g, " ");
|
||||
return text;
|
||||
}
|
||||
function error (parser, er) {
|
||||
closeText(parser);
|
||||
er += "\nLine: "+parser.line+
|
||||
"\nColumn: "+parser.column+
|
||||
"\nChar: "+parser.c;
|
||||
er = new Error(er);
|
||||
parser.error = er;
|
||||
emit(parser, "onerror", er);
|
||||
return parser;
|
||||
}
|
||||
function end (parser) {
|
||||
if (parser.state !== S.TEXT) error(parser, "Unexpected end");
|
||||
closeText(parser);
|
||||
parser.c = "";
|
||||
parser.closed = true;
|
||||
emit(parser, "onend");
|
||||
SAXParser.call(parser, parser.strict, parser.opt);
|
||||
return parser;
|
||||
}
|
||||
function strictFail (parser, message) {
|
||||
if (parser.strict) error(parser, message);
|
||||
}
|
||||
function newTag (parser) {
|
||||
if (!parser.strict) parser.tagName = parser.tagName[parser.tagCase]();
|
||||
parser.tag = { name : parser.tagName, attributes : {} };
|
||||
}
|
||||
function openTag (parser) {
|
||||
parser.sawRoot = true;
|
||||
parser.tags.push(parser.tag);
|
||||
emitNode(parser, "onopentag", parser.tag);
|
||||
parser.tag = null;
|
||||
parser.tagName = parser.attribName = parser.attribValue = "";
|
||||
parser.state = S.TEXT;
|
||||
}
|
||||
function closeTag (parser) {
|
||||
if (!parser.tagName) {
|
||||
strictFail(parser, "Weird empty close tag.");
|
||||
parser.textNode += "</>";
|
||||
parser.state = S.TEXT;
|
||||
return;
|
||||
}
|
||||
do {
|
||||
if (!parser.strict) parser.tagName = parser.tagName[parser.tagCase]();
|
||||
var closeTo = parser.tagName, close = parser.tags.pop();
|
||||
if (!close) {
|
||||
throw "wtf "+parser.tagName+" "+parser.tags+" "+parser.line+ " "+parser.position;
|
||||
}
|
||||
if (closeTo !== close.name) strictFail(parser, "Unexpected close tag.");
|
||||
parser.tag = close;
|
||||
parser.tagName = close.name;
|
||||
emitNode(parser, "onclosetag", parser.tagName);
|
||||
} while (closeTo !== close.name);
|
||||
if (parser.tags.length === 0) parser.closedRoot = true;
|
||||
parser.tagName = parser.attribValue = parser.attribName = "";
|
||||
parser.tag = null;
|
||||
parser.state = S.TEXT;
|
||||
}
|
||||
function parseEntity (parser) {
|
||||
var entity = parser.entity.toLowerCase(), num, numStr = "";
|
||||
if (parser.ENTITIES[entity]) return parser.ENTITIES[entity];
|
||||
if (entity.charAt(0) === "#") {
|
||||
if (entity.charAt(1) === "x") {
|
||||
entity = entity.slice(2);
|
||||
num = parseInt(entity, 16), numStr = num.toString(16);
|
||||
} else {
|
||||
entity = entity.slice(1);
|
||||
num = parseInt(entity, 10), numStr = num.toString(10);
|
||||
}
|
||||
}
|
||||
if (numStr.toLowerCase() !== entity) {
|
||||
strictFail(parser, "Invalid character entity");
|
||||
return "&"+parser.entity + ";";
|
||||
}
|
||||
return String.fromCharCode(num);
|
||||
}
|
||||
|
||||
function write (chunk) {
|
||||
var parser = this;
|
||||
if (this.error) throw this.error;
|
||||
if (parser.closed) return error(parser,
|
||||
"Cannot write after close. Assign an onready handler.");
|
||||
if (chunk === null) return end(parser);
|
||||
var i = 0, c = ""
|
||||
while (parser.c = c = chunk.charAt(i++)) {
|
||||
parser.position ++;
|
||||
if (c === "\n") {
|
||||
parser.line ++;
|
||||
parser.column = 0;
|
||||
} else parser.column ++;
|
||||
switch (parser.state) {
|
||||
case S.BEGIN:
|
||||
if (c === "<") parser.state = S.OPEN_WAKA;
|
||||
else if (not(whitespace,c)) {
|
||||
// have to process this as a text node.
|
||||
// weird, but happens.
|
||||
strictFail(parser, "Non-whitespace before first tag.");
|
||||
parser.textNode = c;
|
||||
state = S.TEXT;
|
||||
}
|
||||
continue;
|
||||
case S.TEXT:
|
||||
if (c === "<") parser.state = S.OPEN_WAKA;
|
||||
else {
|
||||
if (not(whitespace, c) && (!parser.sawRoot || parser.closedRoot))
|
||||
strictFail("Text data outside of root node.");
|
||||
if (c === "&") parser.state = S.TEXT_ENTITY;
|
||||
else parser.textNode += c;
|
||||
}
|
||||
continue;
|
||||
case S.OPEN_WAKA:
|
||||
// either a /, ?, !, or text is coming next.
|
||||
if (c === "!") {
|
||||
parser.state = S.SGML_DECL;
|
||||
parser.sgmlDecl = "";
|
||||
} else if (is(whitespace, c)) {
|
||||
// wait for it...
|
||||
} else if (is(nameStart,c)) {
|
||||
parser.state = S.OPEN_TAG;
|
||||
parser.tagName = c;
|
||||
} else if (c === "/") {
|
||||
parser.state = S.CLOSE_TAG;
|
||||
parser.tagName = "";
|
||||
} else if (c === "?") {
|
||||
parser.state = S.PROC_INST;
|
||||
parser.procInstName = parser.procInstBody = "";
|
||||
} else {
|
||||
strictFail(parser, "Unencoded <");
|
||||
parser.textNode += "<" + c;
|
||||
parser.state = S.TEXT;
|
||||
}
|
||||
continue;
|
||||
case S.SGML_DECL:
|
||||
if ((parser.sgmlDecl+c).toUpperCase() === CDATA) {
|
||||
parser.state = S.CDATA;
|
||||
parser.sgmlDecl = "";
|
||||
parser.cdata = "";
|
||||
} else if (parser.sgmlDecl+c === "--") {
|
||||
parser.state = S.COMMENT;
|
||||
parser.comment = "";
|
||||
parser.sgmlDecl = "";
|
||||
} else if ((parser.sgmlDecl+c).toUpperCase() === DOCTYPE) {
|
||||
parser.state = S.DOCTYPE;
|
||||
if (parser.doctype || parser.sawRoot) strictFail(parser,
|
||||
"Inappropriately located doctype declaration");
|
||||
parser.doctype = "";
|
||||
parser.sgmlDecl = "";
|
||||
} else if (c === ">") {
|
||||
emitNode(parser, "onsgmldeclaration", parser.sgmlDecl);
|
||||
parser.sgmlDecl = "";
|
||||
parser.state = S.TEXT;
|
||||
} else if (is(quote, c)) {
|
||||
parser.state = S.SGML_DECL_QUOTED;
|
||||
parser.sgmlDecl += c;
|
||||
} else parser.sgmlDecl += c;
|
||||
continue;
|
||||
case S.SGML_DECL_QUOTED:
|
||||
if (c === parser.q) {
|
||||
parser.state = S.SGML_DECL;
|
||||
parser.q = "";
|
||||
}
|
||||
parser.sgmlDecl += c;
|
||||
continue;
|
||||
case S.DOCTYPE:
|
||||
if (c === ">") {
|
||||
parser.state = S.TEXT;
|
||||
emitNode(parser, "ondoctype", parser.doctype);
|
||||
parser.doctype = true; // just remember that we saw it.
|
||||
} else {
|
||||
parser.doctype += c;
|
||||
if (c === "[") parser.state = S.DOCTYPE_DTD;
|
||||
else if (is(quote, c)) {
|
||||
parser.state = S.DOCTYPE_QUOTED;
|
||||
parser.q = c;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case S.DOCTYPE_QUOTED:
|
||||
parser.doctype += c;
|
||||
if (c === parser.q) {
|
||||
parser.q = "";
|
||||
parser.state = S.DOCTYPE;
|
||||
}
|
||||
continue;
|
||||
case S.DOCTYPE_DTD:
|
||||
parser.doctype += c;
|
||||
if (c === "]") parser.state = S.DOCTYPE;
|
||||
else if (is(quote,c)) {
|
||||
parser.state = S.DOCTYPE_DTD_QUOTED;
|
||||
parser.q = c;
|
||||
}
|
||||
continue;
|
||||
case S.DOCTYPE_DTD_QUOTED:
|
||||
parser.doctype += c;
|
||||
if (c === parser.q) {
|
||||
parser.state = S.DOCTYPE_DTD;
|
||||
parser.q = "";
|
||||
}
|
||||
continue;
|
||||
case S.COMMENT:
|
||||
if (c === "-") parser.state = S.COMMENT_ENDING;
|
||||
else parser.comment += c;
|
||||
continue;
|
||||
case S.COMMENT_ENDING:
|
||||
if (c === "-") {
|
||||
parser.state = S.COMMENT_ENDED;
|
||||
parser.comment = textopts(parser.opt, parser.comment);
|
||||
if (parser.comment) emitNode(parser, "oncomment", parser.comment);
|
||||
parser.comment = "";
|
||||
} else {
|
||||
strictFail(parser, "Invalid comment");
|
||||
parser.comment += "-" + c;
|
||||
}
|
||||
continue;
|
||||
case S.COMMENT_ENDED:
|
||||
if (c !== ">") strictFail(parser, "Malformed comment");
|
||||
else parser.state = S.TEXT;
|
||||
continue;
|
||||
case S.CDATA:
|
||||
if (c === "]") parser.state = S.CDATA_ENDING;
|
||||
else parser.cdata += c;
|
||||
continue;
|
||||
case S.CDATA_ENDING:
|
||||
if (c === "]") parser.state = S.CDATA_ENDING_2;
|
||||
else {
|
||||
parser.cdata += "]" + c;
|
||||
parser.state = S.CDATA;
|
||||
}
|
||||
continue;
|
||||
case S.CDATA_ENDING_2:
|
||||
if (c === ">") {
|
||||
emitNode(parser, "oncdata", parser.cdata);
|
||||
parser.cdata = "";
|
||||
parser.state = S.TEXT;
|
||||
} else {
|
||||
parser.cdata += "]]" + c;
|
||||
parser.state = S.CDATA;
|
||||
}
|
||||
continue;
|
||||
case S.PROC_INST:
|
||||
if (c === "?") parser.state = S.PROC_INST_ENDING;
|
||||
else if (is(whitespace, c)) parser.state = S.PROC_INST_BODY;
|
||||
else parser.procInstName += c;
|
||||
continue;
|
||||
case S.PROC_INST_BODY:
|
||||
if (!parser.procInstBody && is(whitespace, c)) continue;
|
||||
else if (c === "?") parser.state = S.PROC_INST_ENDING;
|
||||
else if (is(quote, c)) {
|
||||
parser.state = S.PROC_INST_QUOTED;
|
||||
parser.q = c;
|
||||
parser.procInstBody += c;
|
||||
} else parser.procInstBody += c;
|
||||
continue;
|
||||
case S.PROC_INST_ENDING:
|
||||
if (c === ">") {
|
||||
emitNode(parser, "onprocessinginstruction", {
|
||||
name : parser.procInstName,
|
||||
body : parser.procInstBody
|
||||
});
|
||||
parser.procInstName = parser.procInstBody = "";
|
||||
parser.state = S.TEXT;
|
||||
} else {
|
||||
parser.procInstBody += "?" + c;
|
||||
parser.state = S.PROC_INST_BODY;
|
||||
}
|
||||
continue;
|
||||
case S.PROC_INST_QUOTED:
|
||||
parser.procInstBody += c;
|
||||
if (c === parser.q) {
|
||||
parser.state = S.PROC_INST_BODY;
|
||||
parser.q = "";
|
||||
}
|
||||
continue;
|
||||
case S.OPEN_TAG:
|
||||
if (is(nameBody, c)) parser.tagName += c;
|
||||
else {
|
||||
newTag(parser);
|
||||
if (c === ">") openTag(parser);
|
||||
else if (c === "/") parser.state = S.OPEN_TAG_SLASH;
|
||||
else {
|
||||
if (not(whitespace, c)) strictFail(
|
||||
parser, "Invalid character in tag name");
|
||||
parser.state = S.ATTRIB;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case S.OPEN_TAG_SLASH:
|
||||
if (c === ">") {
|
||||
openTag(parser);
|
||||
closeTag(parser);
|
||||
} else {
|
||||
strictFail(parser, "Forward-slash in opening tag not followed by >");
|
||||
parser.state = S.ATTRIB;
|
||||
}
|
||||
continue;
|
||||
case S.ATTRIB:
|
||||
// haven't read the attribute name yet.
|
||||
if (is(whitespace, c)) continue;
|
||||
else if (c === ">") openTag(parser);
|
||||
else if (is(nameStart, c)) {
|
||||
parser.attribName = c;
|
||||
parser.attribValue = "";
|
||||
parser.state = S.ATTRIB_NAME;
|
||||
} else strictFail(parser, "Invalid attribute name");
|
||||
continue;
|
||||
case S.ATTRIB_NAME:
|
||||
if (c === "=") parser.state = S.ATTRIB_VALUE;
|
||||
else if (is(whitespace, c)) parser.state = S.ATTRIB_NAME_SAW_WHITE;
|
||||
else if (is(nameBody, c)) parser.attribName += c;
|
||||
else strictFail(parser, "Invalid attribute name");
|
||||
continue;
|
||||
case S.ATTRIB_NAME_SAW_WHITE:
|
||||
if (c === "=") parser.state = S.ATTRIB_VALUE;
|
||||
else if (is(whitespace, c)) continue;
|
||||
else {
|
||||
strictFail(parser, "Attribute without value");
|
||||
parser.tag.attributes[parser.attribName] = "";
|
||||
parser.attribValue = "";
|
||||
emitNode(parser, "onattribute", { name : parser.attribName, value : "" });
|
||||
parser.attribName = "";
|
||||
if (c === ">") openTag(parser);
|
||||
else if (is(nameStart, c)) {
|
||||
parser.attribName = c;
|
||||
parser.state = S.ATTRIB_NAME;
|
||||
} else {
|
||||
strictFail(parser, "Invalid attribute name");
|
||||
parser.state = S.ATTRIB;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case S.ATTRIB_VALUE:
|
||||
if (is(quote, c)) {
|
||||
parser.q = c;
|
||||
parser.state = S.ATTRIB_VALUE_QUOTED;
|
||||
} else {
|
||||
strictFail(parser, "Unquoted attribute value");
|
||||
parser.state = S.ATTRIB_VALUE_UNQUOTED;
|
||||
parser.attribValue = c;
|
||||
}
|
||||
continue;
|
||||
case S.ATTRIB_VALUE_QUOTED:
|
||||
if (c !== parser.q) {
|
||||
if (c === "&") parser.state = S.ATTRIB_VALUE_ENTITY_Q;
|
||||
else parser.attribValue += c;
|
||||
continue;
|
||||
}
|
||||
parser.tag.attributes[parser.attribName] = parser.attribValue;
|
||||
emitNode(parser, "onattribute", {
|
||||
name:parser.attribName, value:parser.attribValue});
|
||||
parser.attribName = parser.attribValue = "";
|
||||
parser.q = "";
|
||||
parser.state = S.ATTRIB;
|
||||
continue;
|
||||
case S.ATTRIB_VALUE_UNQUOTED:
|
||||
if (not(whitespace+">",c)) {
|
||||
if (c === "&") parser.state = S.ATTRIB_VALUE_ENTITY_U;
|
||||
else parser.attribValue += c;
|
||||
continue;
|
||||
}
|
||||
emitNode(parser, "onattribute", {
|
||||
name:parser.attribName, value:parser.attribValue});
|
||||
parser.attribName = parser.attribValue = "";
|
||||
if (c === ">") openTag(parser);
|
||||
else parser.state = S.ATTRIB;
|
||||
continue;
|
||||
case S.CLOSE_TAG:
|
||||
if (!parser.tagName) {
|
||||
if (is(whitespace, c)) continue;
|
||||
else if (not(nameStart, c)) strictFail(parser,
|
||||
"Invalid tagname in closing tag.");
|
||||
else parser.tagName = c;
|
||||
}
|
||||
else if (c === ">") closeTag(parser);
|
||||
else if (is(nameBody, c)) parser.tagName += c;
|
||||
else {
|
||||
if (not(whitespace, c)) strictFail(parser,
|
||||
"Invalid tagname in closing tag");
|
||||
parser.state = S.CLOSE_TAG_SAW_WHITE;
|
||||
}
|
||||
continue;
|
||||
case S.CLOSE_TAG_SAW_WHITE:
|
||||
if (is(whitespace, c)) continue;
|
||||
if (c === ">") closeTag(parser);
|
||||
else strictFail("Invalid characters in closing tag");
|
||||
continue;
|
||||
case S.TEXT_ENTITY:
|
||||
case S.ATTRIB_VALUE_ENTITY_Q:
|
||||
case S.ATTRIB_VALUE_ENTITY_U:
|
||||
switch(parser.state) {
|
||||
case S.TEXT_ENTITY:
|
||||
var returnState = S.TEXT, buffer = "textNode";
|
||||
break;
|
||||
case S.ATTRIB_VALUE_ENTITY_Q:
|
||||
var returnState = S.ATTRIB_VALUE_QUOTED, buffer = "attribValue";
|
||||
break;
|
||||
case S.ATTRIB_VALUE_ENTITY_U:
|
||||
var returnState = S.ATTRIB_VALUE_UNQUOTED, buffer = "attribValue";
|
||||
break;
|
||||
}
|
||||
if (c === ";") {
|
||||
parser[buffer] += parseEntity(parser);
|
||||
parser.entity = "";
|
||||
parser.state = returnState;
|
||||
}
|
||||
else if (is(entity, c)) parser.entity += c;
|
||||
else {
|
||||
strictFail("Invalid character entity");
|
||||
parser[buffer] += "&" + parser.entity;
|
||||
parser.entity = "";
|
||||
parser.state = returnState;
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
throw "Unknown state: " + parser.state;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return parser;
|
||||
}
|
||||
|
166
bower_components/jsdom/example/sizzle/run.js
vendored
Normal file
166
bower_components/jsdom/example/sizzle/run.js
vendored
Normal file
@ -0,0 +1,166 @@
|
||||
var browser = require("../../lib/jsdom/browser");
|
||||
var dom = browser.browserAugmentation(require("../../lib/jsdom/level2/core").dom.level2.core);
|
||||
|
||||
var util = require("util");
|
||||
|
||||
|
||||
var doc = new dom.Document("html");
|
||||
|
||||
var implementation = new dom.DOMImplementation(doc, {
|
||||
"HTML" : "1.0",
|
||||
"DisableLiveLists" : "1.0"
|
||||
});
|
||||
|
||||
var notations = new dom.NotationNodeMap(
|
||||
doc,
|
||||
doc.createNotationNode("notation1","notation1File", null),
|
||||
doc.createNotationNode("notation2",null, "notation2File")
|
||||
);
|
||||
|
||||
// TODO: consider importing the master list of entities
|
||||
// http://www.w3schools.com/tags/ref_symbols.asp
|
||||
var entities = new dom.EntityNodeMap(
|
||||
doc,
|
||||
doc.createEntityNode("alpha", "α"),
|
||||
doc.createEntityNode("beta", "β"),
|
||||
doc.createEntityNode("gamma", "γ"),
|
||||
doc.createEntityNode("delta", "δ"),
|
||||
doc.createEntityNode("epsilon", "ε")
|
||||
);
|
||||
|
||||
// <!ATTLIST acronym dir CDATA "ltr">
|
||||
|
||||
var defaultAttributes = new dom.NamedNodeMap(doc);
|
||||
var acronym = doc.createElement("acronym");
|
||||
acronym.setAttribute("dir", "ltr");
|
||||
defaultAttributes.setNamedItem(acronym);
|
||||
|
||||
|
||||
|
||||
var doctype = new dom.DocumentType(doc, "html", entities, notations, defaultAttributes);
|
||||
doc.doctype = doctype;
|
||||
doc.implementation = implementation;
|
||||
|
||||
doc.appendChild(doc.createComment(" This is comment number 1."));
|
||||
|
||||
var html = doc.createElement("html");
|
||||
var html = doc.appendChild(html);
|
||||
var head = doc.createElement("head");
|
||||
var head = html.appendChild(head);
|
||||
|
||||
var meta = doc.createElement("meta");
|
||||
meta.setAttribute("http-equiv", "Content-Type");
|
||||
meta.setAttribute("content", "text/html; charset=UTF-8");
|
||||
head.appendChild(meta);
|
||||
|
||||
var title = doc.createElement("title")
|
||||
title.appendChild(doc.createTextNode("hc_staff"));
|
||||
var title = head.appendChild(title);
|
||||
|
||||
// make the tests work....
|
||||
head.appendChild(doc.createElement("script"));
|
||||
head.appendChild(doc.createElement("script"));
|
||||
head.appendChild(doc.createElement("script"));
|
||||
|
||||
var body = doc.createElement("body");
|
||||
var staff = html.appendChild(body);
|
||||
|
||||
var employees = [];
|
||||
var addresses = [];
|
||||
var names = [];
|
||||
var positions = [];
|
||||
var genders = [];
|
||||
var ids = [];
|
||||
var salaries = [];
|
||||
|
||||
// create 5 employees
|
||||
for (var i=0; i<5; i++)
|
||||
{
|
||||
var employee = doc.createElement("p");
|
||||
var address = doc.createElement("acronym");
|
||||
var name = doc.createElement("strong");
|
||||
var position = doc.createElement("code");
|
||||
var gender = doc.createElement("var");
|
||||
var id = doc.createElement("em");
|
||||
var salary = doc.createElement("sup");
|
||||
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
employee.appendChild(id);
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
employee.appendChild(name);
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
employee.appendChild(position);
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
employee.appendChild(salary);
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
employee.appendChild(gender);
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
employee.appendChild(address);
|
||||
employee.appendChild(doc.createTextNode("\n"));
|
||||
staff.appendChild(employee);
|
||||
|
||||
names.push(name);
|
||||
employees.push(employee);
|
||||
addresses.push(address);
|
||||
genders.push(gender);
|
||||
positions.push(position);
|
||||
ids.push(id);
|
||||
salaries.push(salary);
|
||||
}
|
||||
|
||||
ids[0].appendChild(doc.createTextNode("EMP0001"));
|
||||
salaries[0].appendChild(doc.createTextNode("56,000"));
|
||||
addresses[0].setAttribute("title", "Yes");
|
||||
addresses[0].appendChild(doc.createTextNode('1230 North Ave. Dallas, Texas 98551'));
|
||||
names[0].appendChild(doc.createTextNode("Margaret Martin"));
|
||||
genders[0].appendChild(doc.createTextNode("Female"));
|
||||
positions[0].appendChild(doc.createTextNode("Accountant"));
|
||||
|
||||
ids[1].appendChild(doc.createTextNode("EMP0002"));
|
||||
salaries[1].appendChild(doc.createTextNode("35,000"));
|
||||
addresses[1].setAttribute("title", "Yes");
|
||||
addresses[1].setAttribute("class", "Yes");
|
||||
addresses[1].appendChild(doc.createTextNode("β Dallas, γ\n 98554"));
|
||||
names[1].appendChild(doc.createTextNode("Martha Raynolds"));
|
||||
//names[1].appendChild(doc.createCDATASection("This is a CDATASection with EntityReference number 2 &ent2;"));
|
||||
//names[1].appendChild(doc.createCDATASection("This is an adjacent CDATASection with a reference to a tab &tab;"));
|
||||
genders[1].appendChild(doc.createTextNode("Female"));
|
||||
positions[1].appendChild(doc.createTextNode("Secretary"));
|
||||
|
||||
ids[2].appendChild(doc.createTextNode("EMP0003"));
|
||||
salaries[2].appendChild(doc.createTextNode("100,000"));
|
||||
addresses[2].setAttribute("title", "Yes");
|
||||
addresses[2].setAttribute("class", "No");
|
||||
addresses[2].appendChild(doc.createTextNode("PO Box 27 Irving, texas 98553"));
|
||||
names[2].appendChild(doc.createTextNode("Roger\n Jones")) ;
|
||||
// genders[2].appendChild(doc.createEntityReference("δ"));//Text("δ"));
|
||||
positions[2].appendChild(doc.createTextNode("Department Manager"));
|
||||
|
||||
ids[3].appendChild(doc.createTextNode("EMP0004"));
|
||||
ids[3].className = "classy";
|
||||
salaries[3].appendChild(doc.createTextNode("95,000"));
|
||||
addresses[3].setAttribute("title", "Yes");
|
||||
addresses[3].setAttribute("class", "Yα");
|
||||
addresses[3].appendChild(doc.createTextNode("27 South Road. Dallas, Texas 98556"));
|
||||
names[3].appendChild(doc.createTextNode("Jeny Oconnor"));
|
||||
genders[3].appendChild(doc.createTextNode("Female"));
|
||||
positions[3].appendChild(doc.createTextNode("Personal Director"));
|
||||
|
||||
ids[4].appendChild(doc.createTextNode("EMP0005"));
|
||||
salaries[4].appendChild(doc.createTextNode("90,000"));
|
||||
addresses[4].setAttribute("title", "No");
|
||||
addresses[4].id = "theid";
|
||||
addresses[4].appendChild(doc.createTextNode("1821 Nordic. Road, Irving Texas 98558"));
|
||||
names[4].appendChild(doc.createTextNode("Robert Myers"));
|
||||
genders[4].appendChild(doc.createTextNode("male"));
|
||||
positions[4].appendChild(doc.createTextNode("Computer Specialist"));
|
||||
|
||||
//doc.appendChild(doc.createProcessingInstruction("TEST-STYLE", "PIDATA"));
|
||||
|
||||
doc.normalize();
|
||||
|
||||
var sizzleSandbox = {};
|
||||
var sizzle = require("./sizzle").sizzleInit(sizzleSandbox, doc);
|
||||
console.log(util.inspect(sizzle('.classy,p acronym#theid').length));
|
||||
|
||||
|
534
bower_components/jsdom/example/sizzle/sax.js
vendored
Normal file
534
bower_components/jsdom/example/sizzle/sax.js
vendored
Normal file
@ -0,0 +1,534 @@
|
||||
var sax = exports;
|
||||
sax.parser = function (strict, opt) { return new SAXParser(strict, opt) };
|
||||
sax.SAXParser = SAXParser;
|
||||
|
||||
function SAXParser (strict, opt) {
|
||||
this.c = this.comment = this.sgmlDecl =
|
||||
this.textNode = this.tagName = this.doctype =
|
||||
this.procInstName = this.procInstBody = this.entity =
|
||||
this.attribName = this.attribValue = this.q =
|
||||
this.cdata = this.sgmlDecl = "";
|
||||
this.opt = opt || {};
|
||||
this.tagCase = this.opt.lowercasetags ? "toLowerCase" : "toUpperCase";
|
||||
this.tags = [];
|
||||
this.closed = this.closedRoot = this.sawRoot = false;
|
||||
this.tag = this.error = null;
|
||||
this.strict = !!strict;
|
||||
this.state = S.BEGIN;
|
||||
this.ENTITIES = Object.create(sax.ENTITIES);
|
||||
|
||||
// just for error reporting
|
||||
this.position = this.line = this.column = 0;
|
||||
emit(this, "onready");
|
||||
}
|
||||
SAXParser.prototype = {
|
||||
write : write,
|
||||
resume : function () { this.error = null; return this },
|
||||
close : function () { return this.write(null) },
|
||||
}
|
||||
|
||||
// character classes and tokens
|
||||
var whitespace = "\n\t ",
|
||||
// this really needs to be replaced with character classes.
|
||||
// XML allows all manner of ridiculous numbers and digits.
|
||||
number = "0124356789",
|
||||
letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
|
||||
// (Letter | '_' | ':')
|
||||
nameStart = letter+"_:",
|
||||
nameBody = nameStart+number+"-.",
|
||||
quote = "'\"",
|
||||
entity = number+letter+"#",
|
||||
CDATA = "[CDATA[",
|
||||
DOCTYPE = "DOCTYPE";
|
||||
function is (charclass, c) { return charclass.indexOf(c) !== -1 }
|
||||
function not (charclass, c) { return !is(charclass, c) }
|
||||
|
||||
var S = 0;
|
||||
sax.STATE =
|
||||
{ BEGIN : S++
|
||||
, TEXT : S++ // general stuff
|
||||
, TEXT_ENTITY : S++ // & and such.
|
||||
, OPEN_WAKA : S++ // <
|
||||
, SGML_DECL : S++ // <!BLARG
|
||||
, SGML_DECL_QUOTED : S++ // <!BLARG foo "bar
|
||||
, DOCTYPE : S++ // <!DOCTYPE
|
||||
, DOCTYPE_QUOTED : S++ // <!DOCTYPE "//blah
|
||||
, DOCTYPE_DTD : S++ // <!DOCTYPE "//blah" [ ...
|
||||
, DOCTYPE_DTD_QUOTED : S++ // <!DOCTYPE "//blah" [ "foo
|
||||
, COMMENT_STARTING : S++ // <!-
|
||||
, COMMENT : S++ // <!--
|
||||
, COMMENT_ENDING : S++ // <!-- blah -
|
||||
, COMMENT_ENDED : S++ // <!-- blah --
|
||||
, CDATA : S++ // <![CDATA[ something
|
||||
, CDATA_ENDING : S++ // ]
|
||||
, CDATA_ENDING_2 : S++ // ]]
|
||||
, PROC_INST : S++ // <?hi
|
||||
, PROC_INST_BODY : S++ // <?hi there
|
||||
, PROC_INST_QUOTED : S++ // <?hi there
|
||||
, PROC_INST_ENDING : S++ // <?hi there ?
|
||||
, OPEN_TAG : S++ // <strong
|
||||
, OPEN_TAG_SLASH : S++ // <strong /
|
||||
, ATTRIB : S++ // <a
|
||||
, ATTRIB_NAME : S++ // <a foo
|
||||
, ATTRIB_NAME_SAW_WHITE : S++ // <a foo _
|
||||
, ATTRIB_VALUE : S++ // <a foo="bar
|
||||
, ATTRIB_VALUE_QUOTED : S++ // <a foo="bar
|
||||
, ATTRIB_VALUE_UNQUOTED : S++ // <a foo="bar
|
||||
, ATTRIB_VALUE_ENTITY_Q : S++ // <foo bar="""
|
||||
, ATTRIB_VALUE_ENTITY_U : S++ // <foo bar="
|
||||
, CLOSE_TAG : S++ // </a
|
||||
, CLOSE_TAG_SAW_WHITE : S++ // </a >
|
||||
}
|
||||
|
||||
sax.ENTITIES =
|
||||
{ "apos" : "'"
|
||||
, "quot" : '"'
|
||||
, "amp" : "&"
|
||||
, "gt" : ">"
|
||||
, "lt" : "<"
|
||||
}
|
||||
|
||||
for (var S in sax.STATE) sax.STATE[sax.STATE[S]] = S;
|
||||
|
||||
// shorthand
|
||||
S = sax.STATE;
|
||||
sax.EVENTS = [ // for discoverability.
|
||||
"text", "processinginstruction", "sgmldeclaration",
|
||||
"doctype", "comment", "attribute", "opentag", "closetag",
|
||||
"cdata", "error", "end", "ready" ];
|
||||
|
||||
function emit (parser, event, data) {
|
||||
parser[event] && parser[event](data);
|
||||
}
|
||||
function emitNode (parser, nodeType, data) {
|
||||
if (parser.textNode) closeText(parser);
|
||||
emit(parser, nodeType, data);
|
||||
}
|
||||
function closeText (parser) {
|
||||
parser.textNode = textopts(parser.opt, parser.textNode);
|
||||
if (parser.textNode) emit(parser, "ontext", parser.textNode);
|
||||
parser.textNode = "";
|
||||
}
|
||||
function textopts (opt, text) {
|
||||
if (opt.trim) text = text.trim();
|
||||
if (opt.normalize) text = text.replace(/\s+/g, " ");
|
||||
return text;
|
||||
}
|
||||
function error (parser, er) {
|
||||
closeText(parser);
|
||||
er += "\nLine: "+parser.line+
|
||||
"\nColumn: "+parser.column+
|
||||
"\nChar: "+parser.c;
|
||||
er = new Error(er);
|
||||
parser.error = er;
|
||||
emit(parser, "onerror", er);
|
||||
return parser;
|
||||
}
|
||||
function end (parser) {
|
||||
if (parser.state !== S.TEXT) error(parser, "Unexpected end");
|
||||
closeText(parser);
|
||||
parser.c = "";
|
||||
parser.closed = true;
|
||||
emit(parser, "onend");
|
||||
SAXParser.call(parser, parser.strict, parser.opt);
|
||||
return parser;
|
||||
}
|
||||
function strictFail (parser, message) {
|
||||
if (parser.strict) error(parser, message);
|
||||
}
|
||||
function newTag (parser) {
|
||||
if (!parser.strict) parser.tagName = parser.tagName[parser.tagCase]();
|
||||
parser.tag = { name : parser.tagName, attributes : {} };
|
||||
}
|
||||
function openTag (parser) {
|
||||
parser.sawRoot = true;
|
||||
parser.tags.push(parser.tag);
|
||||
emitNode(parser, "onopentag", parser.tag);
|
||||
parser.tag = null;
|
||||
parser.tagName = parser.attribName = parser.attribValue = "";
|
||||
parser.state = S.TEXT;
|
||||
}
|
||||
function closeTag (parser) {
|
||||
if (!parser.tagName) {
|
||||
strictFail(parser, "Weird empty close tag.");
|
||||
parser.textNode += "</>";
|
||||
parser.state = S.TEXT;
|
||||
return;
|
||||
}
|
||||
do {
|
||||
if (!parser.strict) parser.tagName = parser.tagName[parser.tagCase]();
|
||||
var closeTo = parser.tagName, close = parser.tags.pop();
|
||||
if (!close) {
|
||||
throw "wtf "+parser.tagName+" "+parser.tags+" "+parser.line+ " "+parser.position;
|
||||
}
|
||||
if (closeTo !== close.name) strictFail(parser, "Unexpected close tag.");
|
||||
parser.tag = close;
|
||||
parser.tagName = close.name;
|
||||
emitNode(parser, "onclosetag", parser.tagName);
|
||||
} while (closeTo !== close.name);
|
||||
if (parser.tags.length === 0) parser.closedRoot = true;
|
||||
parser.tagName = parser.attribValue = parser.attribName = "";
|
||||
parser.tag = null;
|
||||
parser.state = S.TEXT;
|
||||
}
|
||||
function parseEntity (parser) {
|
||||
var entity = parser.entity.toLowerCase(), num, numStr = "";
|
||||
if (parser.ENTITIES[entity]) return parser.ENTITIES[entity];
|
||||
if (entity.charAt(0) === "#") {
|
||||
if (entity.charAt(1) === "x") {
|
||||
entity = entity.slice(2);
|
||||
num = parseInt(entity, 16), numStr = num.toString(16);
|
||||
} else {
|
||||
entity = entity.slice(1);
|
||||
num = parseInt(entity, 10), numStr = num.toString(10);
|
||||
}
|
||||
}
|
||||
if (numStr.toLowerCase() !== entity) {
|
||||
strictFail(parser, "Invalid character entity");
|
||||
return "&"+parser.entity + ";";
|
||||
}
|
||||
return String.fromCharCode(num);
|
||||
}
|
||||
|
||||
function write (chunk) {
|
||||
var parser = this;
|
||||
if (this.error) throw this.error;
|
||||
if (parser.closed) return error(parser,
|
||||
"Cannot write after close. Assign an onready handler.");
|
||||
if (chunk === null) return end(parser);
|
||||
var i = 0, c = ""
|
||||
while (parser.c = c = chunk.charAt(i++)) {
|
||||
parser.position ++;
|
||||
if (c === "\n") {
|
||||
parser.line ++;
|
||||
parser.column = 0;
|
||||
} else parser.column ++;
|
||||
switch (parser.state) {
|
||||
case S.BEGIN:
|
||||
if (c === "<") parser.state = S.OPEN_WAKA;
|
||||
else if (not(whitespace,c)) {
|
||||
// have to process this as a text node.
|
||||
// weird, but happens.
|
||||
strictFail(parser, "Non-whitespace before first tag.");
|
||||
parser.textNode = c;
|
||||
state = S.TEXT;
|
||||
}
|
||||
continue;
|
||||
case S.TEXT:
|
||||
if (c === "<") parser.state = S.OPEN_WAKA;
|
||||
else if (not(whitespace, c) && (!parser.sawRoot || parser.closedRoot)) {
|
||||
strictFail("Text data outside of root node.");
|
||||
}
|
||||
else if (c === "&") parser.state = S.TEXT_ENTITY;
|
||||
else parser.textNode += c;
|
||||
continue;
|
||||
case S.OPEN_WAKA:
|
||||
// either a /, ?, !, or text is coming next.
|
||||
if (c === "!") {
|
||||
parser.state = S.SGML_DECL;
|
||||
parser.sgmlDecl = "";
|
||||
} else if (is(whitespace, c)) {
|
||||
// wait for it...
|
||||
} else if (is(nameStart,c)) {
|
||||
parser.state = S.OPEN_TAG;
|
||||
parser.tagName = c;
|
||||
} else if (c === "/") {
|
||||
parser.state = S.CLOSE_TAG;
|
||||
parser.tagName = "";
|
||||
} else if (c === "?") {
|
||||
parser.state = S.PROC_INST;
|
||||
parser.procInstName = parser.procInstBody = "";
|
||||
} else {
|
||||
strictFail(parser, "Unencoded <");
|
||||
parser.textNode += "<" + c;
|
||||
parser.state = S.TEXT;
|
||||
}
|
||||
continue;
|
||||
case S.SGML_DECL:
|
||||
if ((parser.sgmlDecl+c).toUpperCase() === CDATA) {
|
||||
parser.state = S.CDATA;
|
||||
parser.sgmlDecl = "";
|
||||
parser.cdata = "";
|
||||
} else if (parser.sgmlDecl+c === "--") {
|
||||
parser.state = S.COMMENT;
|
||||
parser.comment = "";
|
||||
parser.sgmlDecl = "";
|
||||
} else if ((parser.sgmlDecl+c).toUpperCase() === DOCTYPE) {
|
||||
parser.state = S.DOCTYPE;
|
||||
if (parser.doctype || parser.sawRoot) strictFail(parser,
|
||||
"Inappropriately located doctype declaration");
|
||||
parser.doctype = "";
|
||||
parser.sgmlDecl = "";
|
||||
} else if (c === ">") {
|
||||
emitNode(parser, "onsgmldeclaration", parser.sgmlDecl);
|
||||
parser.sgmlDecl = "";
|
||||
parser.state = S.TEXT;
|
||||
} else if (is(quote, c)) {
|
||||
parser.state = S.SGML_DECL_QUOTED;
|
||||
parser.sgmlDecl += c;
|
||||
} else parser.sgmlDecl += c;
|
||||
continue;
|
||||
case S.SGML_DECL_QUOTED:
|
||||
if (c === parser.q) {
|
||||
parser.state = S.SGML_DECL;
|
||||
parser.q = "";
|
||||
}
|
||||
parser.sgmlDecl += c;
|
||||
continue;
|
||||
case S.DOCTYPE:
|
||||
if (c === ">") {
|
||||
parser.state = S.TEXT;
|
||||
emitNode(parser, "ondoctype", parser.doctype);
|
||||
parser.doctype = true; // just remember that we saw it.
|
||||
} else {
|
||||
parser.doctype += c;
|
||||
if (c === "[") parser.state = S.DOCTYPE_DTD;
|
||||
else if (is(quote, c)) {
|
||||
parser.state = S.DOCTYPE_QUOTED;
|
||||
parser.q = c;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case S.DOCTYPE_QUOTED:
|
||||
parser.doctype += c;
|
||||
if (c === parser.q) {
|
||||
parser.q = "";
|
||||
parser.state = S.DOCTYPE;
|
||||
}
|
||||
continue;
|
||||
case S.DOCTYPE_DTD:
|
||||
parser.doctype += c;
|
||||
if (c === "]") parser.state = S.DOCTYPE;
|
||||
else if (is(quote,c)) {
|
||||
parser.state = S.DOCTYPE_DTD_QUOTED;
|
||||
parser.q = c;
|
||||
}
|
||||
continue;
|
||||
case S.DOCTYPE_DTD_QUOTED:
|
||||
parser.doctype += c;
|
||||
if (c === parser.q) {
|
||||
parser.state = S.DOCTYPE_DTD;
|
||||
parser.q = "";
|
||||
}
|
||||
continue;
|
||||
case S.COMMENT:
|
||||
if (c === "-") parser.state = S.COMMENT_ENDING;
|
||||
else parser.comment += c;
|
||||
continue;
|
||||
case S.COMMENT_ENDING:
|
||||
if (c === "-") {
|
||||
parser.state = S.COMMENT_ENDED;
|
||||
parser.comment = textopts(parser.opt, parser.comment);
|
||||
if (parser.comment) emitNode(parser, "oncomment", parser.comment);
|
||||
parser.comment = "";
|
||||
} else {
|
||||
strictFail(parser, "Invalid comment");
|
||||
parser.comment += "-" + c;
|
||||
}
|
||||
continue;
|
||||
case S.COMMENT_ENDED:
|
||||
if (c !== ">") strictFail(parser, "Malformed comment");
|
||||
else parser.state = S.TEXT;
|
||||
continue;
|
||||
case S.CDATA:
|
||||
if (c === "]") parser.state = S.CDATA_ENDING;
|
||||
else parser.cdata += c;
|
||||
continue;
|
||||
case S.CDATA_ENDING:
|
||||
if (c === "]") parser.state = S.CDATA_ENDING_2;
|
||||
else {
|
||||
parser.cdata += "]" + c;
|
||||
parser.state = S.CDATA;
|
||||
}
|
||||
continue;
|
||||
case S.CDATA_ENDING_2:
|
||||
if (c === ">") {
|
||||
emitNode(parser, "oncdata", parser.cdata);
|
||||
parser.cdata = "";
|
||||
parser.state = S.TEXT;
|
||||
} else {
|
||||
parser.cdata += "]]" + c;
|
||||
parser.state = S.CDATA;
|
||||
}
|
||||
continue;
|
||||
case S.PROC_INST:
|
||||
if (c === "?") parser.state = S.PROC_INST_ENDING;
|
||||
else if (is(whitespace, c)) parser.state = S.PROC_INST_BODY;
|
||||
else parser.procInstName += c;
|
||||
continue;
|
||||
case S.PROC_INST_BODY:
|
||||
if (!parser.procInstBody && is(whitespace, c)) continue;
|
||||
else if (c === "?") parser.state = S.PROC_INST_ENDING;
|
||||
else if (is(quote, c)) {
|
||||
parser.state = S.PROC_INST_QUOTED;
|
||||
parser.q = c;
|
||||
parser.procInstBody += c;
|
||||
} else parser.procInstBody += c;
|
||||
continue;
|
||||
case S.PROC_INST_ENDING:
|
||||
if (c === ">") {
|
||||
emitNode(parser, "onprocessinginstruction", {
|
||||
name : parser.procInstName,
|
||||
body : parser.procInstBody
|
||||
});
|
||||
parser.procInstName = parser.procInstBody = "";
|
||||
parser.state = S.TEXT;
|
||||
} else {
|
||||
parser.procInstBody += "?" + c;
|
||||
parser.state = S.PROC_INST_BODY;
|
||||
}
|
||||
continue;
|
||||
case S.PROC_INST_QUOTED:
|
||||
parser.procInstBody += c;
|
||||
if (c === parser.q) {
|
||||
parser.state = S.PROC_INST_BODY;
|
||||
parser.q = "";
|
||||
}
|
||||
continue;
|
||||
case S.OPEN_TAG:
|
||||
if (is(nameBody, c)) parser.tagName += c;
|
||||
else {
|
||||
newTag(parser);
|
||||
if (c === ">") openTag(parser);
|
||||
else if (c === "/") parser.state = S.OPEN_TAG_SLASH;
|
||||
else {
|
||||
if (not(whitespace, c)) strictFail(
|
||||
parser, "Invalid character in tag name");
|
||||
parser.state = S.ATTRIB;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case S.OPEN_TAG_SLASH:
|
||||
if (c === ">") {
|
||||
openTag(parser);
|
||||
closeTag(parser);
|
||||
} else {
|
||||
strictFail(parser, "Forward-slash in opening tag not followed by >");
|
||||
parser.state = S.ATTRIB;
|
||||
}
|
||||
continue;
|
||||
case S.ATTRIB:
|
||||
// haven't read the attribute name yet.
|
||||
if (is(whitespace, c)) continue;
|
||||
else if (c === ">") openTag(parser);
|
||||
else if (is(nameStart, c)) {
|
||||
parser.attribName = c;
|
||||
parser.attribValue = "";
|
||||
parser.state = S.ATTRIB_NAME;
|
||||
} else strictFail(parser, "Invalid attribute name");
|
||||
continue;
|
||||
case S.ATTRIB_NAME:
|
||||
if (c === "=") parser.state = S.ATTRIB_VALUE;
|
||||
else if (is(whitespace, c)) parser.state = S.ATTRIB_NAME_SAW_WHITE;
|
||||
else if (is(nameBody, c)) parser.attribName += c;
|
||||
else strictFail(parser, "Invalid attribute name");
|
||||
continue;
|
||||
case S.ATTRIB_NAME_SAW_WHITE:
|
||||
if (c === "=") parser.state = S.ATTRIB_VALUE;
|
||||
else if (is(whitespace, c)) continue;
|
||||
else {
|
||||
strictFail(parser, "Attribute without value");
|
||||
parser.tag.attributes[parser.attribName] = "";
|
||||
parser.attribValue = "";
|
||||
emitNode(parser, "onattribute", { name : parser.attribName, value : "" });
|
||||
parser.attribName = "";
|
||||
if (c === ">") openTag(parser);
|
||||
else if (is(nameStart, c)) {
|
||||
parser.attribName = c;
|
||||
parser.state = S.ATTRIB_NAME;
|
||||
} else {
|
||||
strictFail(parser, "Invalid attribute name");
|
||||
parser.state = S.ATTRIB;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
case S.ATTRIB_VALUE:
|
||||
if (is(quote, c)) {
|
||||
parser.q = c;
|
||||
parser.state = S.ATTRIB_VALUE_QUOTED;
|
||||
} else {
|
||||
strictFail(parser, "Unquoted attribute value");
|
||||
parser.state = S.ATTRIB_VALUE_UNQUOTED;
|
||||
parser.attribValue = c;
|
||||
}
|
||||
continue;
|
||||
case S.ATTRIB_VALUE_QUOTED:
|
||||
if (c !== parser.q) {
|
||||
if (c === "&") parser.state = S.ATTRIB_VALUE_ENTITY_Q;
|
||||
else parser.attribValue += c;
|
||||
continue;
|
||||
}
|
||||
parser.tag.attributes[parser.attribName] = parser.attribValue;
|
||||
emitNode(parser, "onattribute", {
|
||||
name:parser.attribName, value:parser.attribValue});
|
||||
parser.attribName = parser.attribValue = "";
|
||||
parser.q = "";
|
||||
parser.state = S.ATTRIB;
|
||||
continue;
|
||||
case S.ATTRIB_VALUE_UNQUOTED:
|
||||
if (not(whitespace+">",c)) {
|
||||
if (c === "&") parser.state = S.ATTRIB_VALUE_ENTITY_U;
|
||||
else parser.attribValue += c;
|
||||
continue;
|
||||
}
|
||||
emitNode(parser, "onattribute", {
|
||||
name:parser.attribName, value:parser.attribValue});
|
||||
parser.attribName = parser.attribValue = "";
|
||||
if (c === ">") openTag(parser);
|
||||
else parser.state = S.ATTRIB;
|
||||
continue;
|
||||
case S.CLOSE_TAG:
|
||||
if (!parser.tagName) {
|
||||
if (is(whitespace, c)) continue;
|
||||
else if (not(nameStart, c)) strictFail(parser,
|
||||
"Invalid tagname in closing tag.");
|
||||
else parser.tagName = c;
|
||||
}
|
||||
else if (c === ">") closeTag(parser);
|
||||
else if (is(nameBody, c)) parser.tagName += c;
|
||||
else {
|
||||
if (not(whitespace, c)) strictFail(parser,
|
||||
"Invalid tagname in closing tag");
|
||||
parser.state = S.CLOSE_TAG_SAW_WHITE;
|
||||
}
|
||||
continue;
|
||||
case S.CLOSE_TAG_SAW_WHITE:
|
||||
if (is(whitespace, c)) continue;
|
||||
if (c === ">") closeTag(parser);
|
||||
else strictFail("Invalid characters in closing tag");
|
||||
continue;
|
||||
case S.TEXT_ENTITY:
|
||||
case S.ATTRIB_VALUE_ENTITY_Q:
|
||||
case S.ATTRIB_VALUE_ENTITY_U:
|
||||
switch(parser.state) {
|
||||
case S.TEXT_ENTITY:
|
||||
var returnState = S.TEXT, buffer = "textNode";
|
||||
break;
|
||||
case S.ATTRIB_VALUE_ENTITY_Q:
|
||||
var returnState = S.ATTRIB_VALUE_QUOTED, buffer = "attribValue";
|
||||
break;
|
||||
case S.ATTRIB_VALUE_ENTITY_U:
|
||||
var returnState = S.ATTRIB_VALUE_UNQUOTED, buffer = "attribValue";
|
||||
break;
|
||||
}
|
||||
if (c === ";") {
|
||||
parser[buffer] += parseEntity(parser);
|
||||
parser.entity = "";
|
||||
parser.state = returnState;
|
||||
}
|
||||
else if (is(entity, c)) parser.entity += c;
|
||||
else {
|
||||
strictFail("Invalid character entity");
|
||||
parser[buffer] += "&" + parser.entity;
|
||||
parser.entity = "";
|
||||
parser.state = returnState;
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
throw "Unknown state: " + parser.state;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return parser;
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user