├── README.md ├── angular.min.js ├── app.js ├── icon.png ├── img ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── demo.gif └── new-demo.gif ├── init.js ├── manifest.json └── popup.html /README.md: -------------------------------------------------------------------------------- 1 | webchatHelper 2 | ============= 3 | 4 | # 一个微信群发信息的chrome扩展 5 | 6 | ## version 1.5 7 | 8 | ![](https://github.com/think2011/webchatHelper/raw/master/img/demo.gif) 9 | 10 | ![](https://github.com/think2011/webchatHelper/raw/master/img/1.png) 11 | 12 | ![](https://github.com/think2011/webchatHelper/raw/master/img/2.png) 13 | 14 | ![](https://github.com/think2011/webchatHelper/raw/master/img/3.png) 15 | 16 | ![](https://github.com/think2011/webchatHelper/raw/master/img/4.png) 17 | 18 | ![](https://github.com/think2011/webchatHelper/raw/master/img/5.png) 19 | 20 | ## version 3 21 | 22 | ![](https://github.com/think2011/webchatHelper/raw/master/img/new-demo.gif) 23 | -------------------------------------------------------------------------------- /angular.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.13-build.2262+sha.a9fcb0d 3 | (c) 2010-2014 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(R,S,s){'use strict';function w(b){return function(){var a=arguments[0],c,a="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.2.13-build.2262+sha.a9fcb0d/"+(b?b+"/":"")+a;for(c=1;c").append(b).html();try{return 3===b[0].nodeType?K(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, 15 | function(a,b){return"<"+K(b)})}catch(d){return K(c)}}function Vb(b){try{return decodeURIComponent(b)}catch(a){}}function Wb(b){var a={},c,d;q((b||"").split("&"),function(b){b&&(c=b.split("="),d=Vb(c[0]),B(d)&&(b=B(c[1])?Vb(c[1]):!0,a[d]?M(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Xb(b){var a=[];q(b,function(b,d){M(b)?q(b,function(b){a.push(wa(d,!0)+(!0===b?"":"="+wa(b,!0)))}):a.push(wa(d,!0)+(!0===b?"":"="+wa(b,!0)))});return a.length?a.join("&"):""}function tb(b){return wa(b, 16 | !0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function wa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,a?"%20":"+")}function Tc(b,a){function c(a){a&&d.push(a)}var d=[b],e,g,f=["ng:app","ng-app","x-ng-app","data-ng-app"],h=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;q(f,function(a){f[a]=!0;c(S.getElementById(a));a=a.replace(":","\\:");b.querySelectorAll&&(q(b.querySelectorAll("."+a),c),q(b.querySelectorAll("."+ 17 | a+"\\:"),c),q(b.querySelectorAll("["+a+"]"),c))});q(d,function(a){if(!e){var b=h.exec(" "+a.className+" ");b?(e=a,g=(b[2]||"").replace(/\s+/g,",")):q(a.attributes,function(b){!e&&f[b.name]&&(e=a,g=b.value)})}});e&&a(e,g?[g]:[])}function Yb(b,a){var c=function(){b=z(b);if(b.injector()){var c=b[0]===S?"document":ga(b);throw Oa("btstrpd",c);}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);a.unshift("ng");c=Zb(a);c.invoke(["$rootScope","$rootElement","$compile","$injector","$animate", 18 | function(a,b,c,d,e){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},d=/^NG_DEFER_BOOTSTRAP!/;if(R&&!d.test(R.name))return c();R.name=R.name.replace(d,"");Ca.resumeBootstrap=function(b){q(b,function(b){a.push(b)});c()}}function db(b,a){a=a||"_";return b.replace(Uc,function(b,d){return(d?a:"")+b.toLowerCase()})}function ub(b,a,c){if(!b)throw Oa("areq",a||"?",c||"required");return b}function Qa(b,a,c){c&&M(b)&&(b=b[b.length-1]);ub(N(b),a,"not a function, got "+(b&&"object"==typeof b? 19 | b.constructor.name||"Object":typeof b));return b}function xa(b,a){if("hasOwnProperty"===b)throw Oa("badname",a);}function $b(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,g=a.length,f=0;f "+b;a.removeChild(a.firstChild);yb(this,a.childNodes);z(S.createDocumentFragment()).append(this)}else yb(this, 23 | b)}function zb(b){return b.cloneNode(!0)}function Ea(b){ac(b);var a=0;for(b=b.childNodes||[];a=O?(c.preventDefault=null,c.stopPropagation=null,c.isDefaultPrevented=null):(delete c.preventDefault,delete c.stopPropagation,delete c.isDefaultPrevented)};c.elem=b;return c}function Fa(b){var a=typeof b,c;"object"==a&&null!==b?"function"==typeof(c=b.$$hashKey)?c=b.$$hashKey():c=== 28 | s&&(c=b.$$hashKey=$a()):c=b;return a+":"+c}function Ta(b){q(b,this.put,this)}function hc(b){var a,c;"function"==typeof b?(a=b.$inject)||(a=[],b.length&&(c=b.toString().replace($c,""),c=c.match(ad),q(c[1].split(bd),function(b){b.replace(cd,function(b,c,d){a.push(d)})})),b.$inject=a):M(b)?(c=b.length-1,Qa(b[c],"fn"),a=b.slice(0,c)):Qa(b,"fn",!0);return a}function Zb(b){function a(a){return function(b,c){if(X(b))q(b,Pb(a));else return a(b,c)}}function c(a,b){xa(a,"service");if(N(b)||M(b))b=n.instantiate(b); 29 | if(!b.$get)throw Ua("pget",a);return l[a+h]=b}function d(a,b){return c(a,{$get:b})}function e(a){var b=[],c,d,g,h;q(a,function(a){if(!k.get(a)){k.put(a,!0);try{if(u(a))for(c=Va(a),b=b.concat(e(c.requires)).concat(c._runBlocks),d=c._invokeQueue,g=0,h=d.length;g 4096 bytes)!"));else{if(m.cookie!==da)for(da=m.cookie,d=da.split("; "),V={},g=0;gk&&this.remove(p.key),b},get:function(a){var b=l[a];if(b)return e(b),m[a]},remove:function(a){var b=l[a];b&&(b==n&&(n=b.p),b==p&&(p=b.n),g(b.n,b.p),delete l[a],delete m[a],f--)},removeAll:function(){m={};f=0;l={};n=p=null},destroy:function(){l=h=m=null;delete a[b]},info:function(){return D({},h,{size:f})}}}var a={};b.info=function(){var b={};q(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]}; 39 | return b}}function hd(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function jc(b,a){var c={},d="Directive",e=/^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/,g=/(([\d\w\-_]+)(?:\:([^;]+))?;?)/,f=/^(on[a-z]+|formaction)$/;this.directive=function m(a,e){xa(a,"directive");u(a)?(ub(e,"directiveFactory"),c.hasOwnProperty(a)||(c[a]=[],b.factory(a+d,["$injector","$exceptionHandler",function(b,d){var e=[];q(c[a],function(c,g){try{var f=b.invoke(c);N(f)?f={compile:$(f)}:!f.compile&&f.link&&(f.compile= 40 | $(f.link));f.priority=f.priority||0;f.index=g;f.name=f.name||a;f.require=f.require||f.controller&&f.name;f.restrict=f.restrict||"A";e.push(f)}catch(m){d(m)}});return e}])),c[a].push(e)):q(a,Pb(m));return this};this.aHrefSanitizationWhitelist=function(b){return B(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return B(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};this.$get=["$injector","$interpolate", 41 | "$exceptionHandler","$http","$templateCache","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,l,n,p,r,E,y,H,v,G,L){function A(a,b,c,d,e){a instanceof z||(a=z(a));q(a,function(b,c){3==b.nodeType&&b.nodeValue.match(/\S+/)&&(a[c]=z(b).wrap("").parent()[0])});var g=I(a,b,a,c,d,e);la(a,"ng-scope");return function(b,c,d){ub(b,"scope");var e=c?Ga.clone.call(a):a;q(d,function(a,b){e.data("$"+b+"Controller",a)});d=0;for(var f=e.length;darguments.length&& 47 | (b=a,a=s);D&&(c=ca);return p(a,b,c)}var J,A,v,I,da,C,ca={},hb;J=c===g?d:Sb(d,new Eb(z(g),d.$attr));A=J.$$element;if(L){var Q=/^\s*([@=&])(\??)\s*(\w*)\s*$/;f=z(g);C=e.$new(!0);ha&&ha===L.$$originalDirective?f.data("$isolateScope",C):f.data("$isolateScopeNoTemplate",C);la(f,"ng-isolate-scope");q(L.scope,function(a,c){var d=a.match(Q)||[],g=d[3]||c,f="?"==d[2],d=d[1],m,l,n,p;C.$$isolateBindings[c]=d+g;switch(d){case "@":J.$observe(g,function(a){C[c]=a});J.$$observers[g].$$scope=e;J[g]&&(C[c]=b(J[g])(e)); 48 | break;case "=":if(f&&!J[g])break;l=r(J[g]);p=l.literal?ua:function(a,b){return a===b};n=l.assign||function(){m=C[c]=l(e);throw ia("nonassign",J[g],L.name);};m=C[c]=l(e);C.$watch(function(){var a=l(e);p(a,C[c])||(p(a,m)?n(e,a=C[c]):C[c]=a);return m=a},null,l.literal);break;case "&":l=r(J[g]);C[c]=function(a){return l(e,a)};break;default:throw ia("iscp",L.name,c,a);}})}hb=p&&y;V&&q(V,function(a){var b={$scope:a===L||a.$$isolateScope?C:e,$element:A,$attrs:J,$transclude:hb},c;da=a.controller;"@"==da&& 49 | (da=J[a.name]);c=E(da,b);ca[a.name]=c;D||A.data("$"+a.name+"Controller",c);a.controllerAs&&(b.$scope[a.controllerAs]=c)});f=0;for(v=m.length;fF.priority)break;if(U=F.scope)I=I||F,F.templateUrl||(K("new/isolated scope",L,F,Y),X(U)&&(L=F));w=F.name;!F.templateUrl&&F.controller&&(U=F.controller,V=V||{},K("'"+w+"' controller",V[w],F,Y),V[w]=F);if(U=F.transclude)x=!0,F.$$tlb||(K("transclusion",Q,F,Y),Q=F),"element"==U?(D=!0,v=F.priority, 51 | U=ca(c,Wa,T),Y=d.$$element=z(S.createComment(" "+w+": "+d[w]+" ")),c=Y[0],ib(g,z(va.call(U,0)),c),R=A(U,e,v,f&&f.name,{nonTlbTranscludeDirective:Q})):(U=z(zb(c)).contents(),Y.empty(),R=A(U,e));if(F.template)if(K("template",ha,F,Y),ha=F,U=N(F.template)?F.template(Y,d):F.template,U=W(U),F.replace){f=F;U=z("
"+aa(U)+"
").contents();c=U[0];if(1!=U.length||1!==c.nodeType)throw ia("tplrt",w,"");ib(g,Y,c);na={$attr:{}};U=da(c,[],na);var Z=a.splice(O+1,a.length-(O+1));L&&ic(U);a=a.concat(U).concat(Z); 52 | B(d,na);na=a.length}else Y.html(U);if(F.templateUrl)K("template",ha,F,Y),ha=F,F.replace&&(f=F),H=t(a.splice(O,a.length-O),Y,d,g,R,m,n,{controllerDirectives:V,newIsolateScopeDirective:L,templateDirective:ha,nonTlbTranscludeDirective:Q}),na=a.length;else if(F.compile)try{P=F.compile(Y,d,R),N(P)?y(null,P,Wa,T):P&&y(P.pre,P.post,Wa,T)}catch($){l($,ga(Y))}F.terminal&&(H.terminal=!0,v=Math.max(v,F.priority))}H.scope=I&&!0===I.scope;H.transclude=x&&R;p.hasElementTranscludeDirective=D;return H}function ic(a){for(var b= 53 | 0,c=a.length;bp.priority)&&-1!=p.restrict.indexOf(g)&&(r&&(p=Rb(p,{$$start:r,$$end:n})),b.push(p),k=p)}catch(G){l(G)}}return k}function B(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;q(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,g){"class"==g?(la(e, 54 | b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==g?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==g.charAt(0)||a.hasOwnProperty(g)||(a[g]=b,d[g]=c[g])})}function t(a,b,c,d,e,g,f,k){var m=[],r,l,E=b[0],y=a.shift(),G=D({},y,{templateUrl:null,transclude:null,replace:null,$$originalDirective:y}),A=N(y.templateUrl)?y.templateUrl(b,c):y.templateUrl;b.empty();n.get(v.getTrustedResourceUrl(A),{cache:p}).success(function(n){var p,H;n=W(n);if(y.replace){n=z("
"+ 55 | aa(n)+"
").contents();p=n[0];if(1!=n.length||1!==p.nodeType)throw ia("tplrt",y.name,A);n={$attr:{}};ib(d,b,p);var v=da(p,[],n);X(y.scope)&&ic(v);a=v.concat(a);B(c,n)}else p=E,b.html(n);a.unshift(G);r=ha(a,p,c,e,b,y,g,f,k);q(d,function(a,c){a==p&&(d[c]=b[0])});for(l=I(b[0].childNodes,e);m.length;){n=m.shift();H=m.shift();var L=m.shift(),C=m.shift(),v=b[0];if(H!==E){var ca=H.className;k.hasElementTranscludeDirective&&y.replace||(v=zb(p));ib(L,z(H),v);la(z(v),ca)}H=r.transclude?V(n,r.transclude): 56 | C;r(l,n,v,d,H)}m=null}).error(function(a,b,c,d){throw ia("tpload",d.url);});return function(a,b,c,d,e){m?(m.push(b),m.push(c),m.push(d),m.push(e)):r(l,b,c,d,e)}}function x(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.namea.status?b:n.reject(b)}var d={transformRequest:e.transformRequest, 65 | transformResponse:e.transformResponse},g=function(a){function b(a){var c;q(a,function(b,d){N(b)&&(c=b(),null!=c?a[d]=c:delete a[d])})}var c=e.headers,d=D({},a.headers),g,f,c=D({},c.common,c[K(a.method)]);b(c);b(d);a:for(g in c){a=K(g);for(f in d)if(K(f)===a)continue a;d[g]=c[g]}return d}(a);D(d,a);d.headers=g;d.method=Ia(d.method);(a=Fb(d.url)?b.cookies()[d.xsrfCookieName||e.xsrfCookieName]:s)&&(g[d.xsrfHeaderName||e.xsrfHeaderName]=a);var f=[function(a){g=a.headers;var b=oc(a.data,nc(g),a.transformRequest); 66 | x(a.data)&&q(g,function(a,b){"content-type"===K(b)&&delete g[b]});x(a.withCredentials)&&!x(e.withCredentials)&&(a.withCredentials=e.withCredentials);return E(a,b,g).then(c,c)},s],k=n.when(d);for(q(v,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var h=f.shift(),k=k.then(a,h)}k.success=function(a){k.then(function(b){a(b.data,b.status,b.headers,d)});return k};k.error=function(a){k.then(null, 67 | function(b){a(b.data,b.status,b.headers,d)});return k};return k}function E(b,c,g){function f(a,b,c){v&&(200<=a&&300>a?v.put(s,[a,b,mc(c)]):v.remove(s));m(b,a,c);d.$$phase||d.$apply()}function m(a,c,d){c=Math.max(c,0);(200<=c&&300>c?p.resolve:p.reject)({data:a,status:c,headers:nc(d),config:b})}function k(){var a=bb(r.pendingRequests,b);-1!==a&&r.pendingRequests.splice(a,1)}var p=n.defer(),E=p.promise,v,q,s=y(b.url,b.params);r.pendingRequests.push(b);E.then(k,k);(b.cache||e.cache)&&(!1!==b.cache&&"GET"== 68 | b.method)&&(v=X(b.cache)?b.cache:X(e.cache)?e.cache:H);if(v)if(q=v.get(s),B(q)){if(q.then)return q.then(k,k),q;M(q)?m(q[1],q[0],ba(q[2])):m(q,200,{})}else v.put(s,E);x(q)&&a(b.method,s,c,f,g,b.timeout,b.withCredentials,b.responseType);return E}function y(a,b){if(!b)return a;var c=[];Pc(b,function(a,b){null===a||x(a)||(M(a)||(a=[a]),q(a,function(a){X(a)&&(a=qa(a));c.push(wa(b)+"="+wa(a))}))});return a+(-1==a.indexOf("?")?"?":"&")+c.join("&")}var H=c("$http"),v=[];q(g,function(a){v.unshift(u(a)?p.get(a): 69 | p.invoke(a))});q(f,function(a,b){var c=u(a)?p.get(a):p.invoke(a);v.splice(b,0,{response:function(a){return c(n.when(a))},responseError:function(a){return c(n.reject(a))}})});r.pendingRequests=[];(function(a){q(arguments,function(a){r[a]=function(b,c){return r(D(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){r[a]=function(b,c,d){return r(D(d||{},{method:a,url:b,data:c}))}})})("post","put");r.defaults=e;return r}]}function nd(b){if(8>=O&&(!b.match(/^(get|post|head|put|delete|options)$/i)|| 70 | !R.XMLHttpRequest))return new R.ActiveXObject("Microsoft.XMLHTTP");if(R.XMLHttpRequest)return new R.XMLHttpRequest;throw w("$httpBackend")("noxhr");}function od(){this.$get=["$browser","$window","$document",function(b,a,c){return pd(b,nd,b.defer,a.angular.callbacks,c[0])}]}function pd(b,a,c,d,e){function g(a,b){var c=e.createElement("script"),d=function(){c.onreadystatechange=c.onload=c.onerror=null;e.body.removeChild(c);b&&b()};c.type="text/javascript";c.src=a;O&&8>=O?c.onreadystatechange=function(){/loaded|complete/.test(c.readyState)&& 71 | d()}:c.onload=c.onerror=function(){d()};e.body.appendChild(c);return d}var f=-1;return function(e,m,k,l,n,p,r,E){function y(){v=f;L&&L();A&&A.abort()}function H(a,d,e,g){I&&c.cancel(I);L=A=null;d=0===d?e?200:404:d;a(1223==d?204:d,e,g);b.$$completeOutstandingRequest(t)}var v;b.$$incOutstandingRequestCount();m=m||b.url();if("jsonp"==K(e)){var G="_"+(d.counter++).toString(36);d[G]=function(a){d[G].data=a};var L=g(m.replace("JSON_CALLBACK","angular.callbacks."+G),function(){d[G].data?H(l,200,d[G].data): 72 | H(l,v||-2);d[G]=Ca.noop})}else{var A=a(e);A.open(e,m,!0);q(n,function(a,b){B(a)&&A.setRequestHeader(b,a)});A.onreadystatechange=function(){if(A&&4==A.readyState){var a=null,b=null;v!==f&&(a=A.getAllResponseHeaders(),b="response"in A?A.response:A.responseText);H(l,v||A.status,b,a)}};r&&(A.withCredentials=!0);if(E)try{A.responseType=E}catch(s){if("json"!==E)throw s;}A.send(k||null)}if(0=h&&(n.resolve(r),l(p.$$intervalId),delete e[p.$$intervalId]);E||b.$apply()},f);e[p.$$intervalId]=n;return p}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],!0):!1};return d}]}function sd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"", 76 | gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a", 77 | "short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function qc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=tb(b[a]);return b.join("/")}function rc(b,a,c){b=ya(b,c);a.$$protocol=b.protocol;a.$$host=b.hostname;a.$$port=W(b.port)||td[b.protocol]||null}function sc(b,a,c){var d="/"!==b.charAt(0);d&&(b="/"+b);b=ya(b,c);a.$$path=decodeURIComponent(d&& 78 | "/"===b.pathname.charAt(0)?b.pathname.substring(1):b.pathname);a.$$search=Wb(b.search);a.$$hash=decodeURIComponent(b.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function oa(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Xa(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Gb(b){return b.substr(0,Xa(b).lastIndexOf("/")+1)}function tc(b,a){this.$$html5=!0;a=a||"";var c=Gb(b);rc(b,this,b);this.$$parse=function(a){var e=oa(c,a);if(!u(e))throw Hb("ipthprfx", 79 | a,c);sc(e,this,b);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Xb(this.$$search),b=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=qc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=oa(b,d))!==s)return d=e,(e=oa(a,e))!==s?c+(oa("/",e)||e):b+d;if((e=oa(c,d))!==s)return c+e;if(c==d+"/")return c}}function Ib(b,a){var c=Gb(b);rc(b,this,b);this.$$parse=function(d){var e=oa(b,d)||oa(c,d),e="#"==e.charAt(0)?oa(a,e): 80 | this.$$html5?e:"";if(!u(e))throw Hb("ihshprfx",d,a);sc(e,this,b);d=this.$$path;var g=/^\/?.*?:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));g.exec(e)||(d=(e=g.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Xb(this.$$search),e=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=qc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Xa(b)==Xa(a))return a}}function uc(b,a){this.$$html5=!0;Ib.apply(this,arguments);var c=Gb(b); 81 | this.$$rewrite=function(d){var e;if(b==Xa(d))return d;if(e=oa(c,d))return b+a+e;if(c===d+"/")return c}}function jb(b){return function(){return this[b]}}function vc(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ud(){var b="",a=!1;this.hashPrefix=function(a){return B(a)?(b=a,this):b};this.html5Mode=function(b){return B(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,g){function f(a){c.$broadcast("$locationChangeSuccess", 82 | h.absUrl(),a)}var h,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?tc:uc):(m=Xa(k),e=Ib);h=new e(m,"#"+b);h.$$parse(h.$$rewrite(k));g.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=z(a.target);"a"!==K(b[0].nodeName);)if(b[0]===g[0]||!(b=b.parent())[0])return;var e=b.prop("href");X(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=ya(e.animVal).href);var f=h.$$rewrite(e);e&&(!b.attr("target")&&f&&!a.isDefaultPrevented())&& 83 | (a.preventDefault(),f!=d.url()&&(h.$$parse(f),c.$apply(),R.angular["ff-684208-preventDefault"]=!0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);c.$broadcast("$locationChangeStart",a,b).defaultPrevented?(h.$$parse(b),d.url(b)):f(b)}),c.$$phase||c.$digest())});var l=0;c.$watch(function(){var a=d.url(),b=h.$$replace;l&&a==h.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented? 84 | h.$$parse(a):(d.url(h.absUrl(),b),f(a))}));h.$$replace=!1;return l});return h}]}function vd(){var b=!0,a=this;this.debugEnabled=function(a){return B(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||t;a=!1;try{a=!!e.apply}catch(m){}return a?function(){var a= 85 | [];q(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ea(b,a){if("constructor"===b)throw za("isecfld",a);return b}function Ya(b,a){if(b){if(b.constructor===b)throw za("isecfn",a);if(b.document&&b.location&&b.alert&&b.setInterval)throw za("isecwindow",a);if(b.children&&(b.nodeName||b.on&&b.find))throw za("isecdom", 86 | a);}return b}function kb(b,a,c,d,e){e=e||{};a=a.split(".");for(var g,f=0;1e?wc(d[0],d[1],d[2],d[3],d[4],c,a):function(b,g){var f=0,h;do h=wc(d[f++],d[f++],d[f++],d[f++],d[f++],c,a)(b,g),g=s,b=h;while(fa)for(b in f++,d)d.hasOwnProperty(b)&&!e.hasOwnProperty(b)&&(l--,delete d[b])}else d!== 100 | e&&(d=e,f++);return f},function(){b(e,d,c)})},$digest:function(){var d,f,g,h,k=this.$$asyncQueue,l=this.$$postDigestQueue,q,A,s=b,I,V=[],z,B,C;m("$digest");c=null;do{A=!1;for(I=this;k.length;){try{C=k.shift(),C.scope.$eval(C.expression)}catch(u){p.$$phase=null,e(u)}c=null}a:do{if(h=I.$$watchers)for(q=h.length;q--;)try{if(d=h[q])if((f=d.get(I))!==(g=d.last)&&!(d.eq?ua(f,g):"number"==typeof f&&"number"==typeof g&&isNaN(f)&&isNaN(g)))A=!0,c=d,d.last=d.eq?ba(f):f,d.fn(f,g===n?f:g,I),5>s&&(z=4-s,V[z]|| 101 | (V[z]=[]),B=N(d.exp)?"fn: "+(d.exp.name||d.exp.toString()):d.exp,B+="; newVal: "+qa(f)+"; oldVal: "+qa(g),V[z].push(B));else if(d===c){A=!1;break a}}catch(w){p.$$phase=null,e(w)}if(!(h=I.$$childHead||I!==this&&I.$$nextSibling))for(;I!==this&&!(h=I.$$nextSibling);)I=I.$parent}while(I=h);if((A||k.length)&&!s--)throw p.$$phase=null,a("infdig",b,qa(V));}while(A||k.length);for(p.$$phase=null;l.length;)try{l.shift()()}catch(Q){e(Q)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy"); 102 | this.$$destroyed=!0;this!==p&&(q(this.$$listenerCount,cb(null,l,this)),a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a){p.$$phase||p.$$asyncQueue.length|| 103 | f.defer(function(){p.$$asyncQueue.length&&p.$digest()});this.$$asyncQueue.push({scope:this,expression:a})},$$postDigest:function(a){this.$$postDigestQueue.push(a)},$apply:function(a){try{return m("$apply"),this.$eval(a)}catch(b){e(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw e(c),c;}}},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){c[bb(c, 104 | b)]=null;l(e,1,a)}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=[h].concat(va.call(arguments,1)),m,l;do{d=f.$$listeners[a]||c;h.currentScope=f;m=0;for(l=d.length;mc.msieDocumentMode)throw sa("iequirks");var e=ba(fa);e.isEnabled=function(){return b};e.trustAs=d.trustAs;e.getTrusted=d.getTrusted;e.valueOf=d.valueOf;b||(e.trustAs=e.getTrusted=function(a,b){return b},e.valueOf=Ba);e.parseAs=function(b,c){var d=a(c);return d.literal&&d.constant?d:function(a,c){return e.getTrusted(b,d(a,c))}};var g=e.parseAs, 111 | f=e.getTrusted,h=e.trustAs;q(fa,function(a,b){var c=K(b);e[Ra("parse_as_"+c)]=function(b){return g(a,b)};e[Ra("get_trusted_"+c)]=function(b){return f(a,b)};e[Ra("trust_as_"+c)]=function(b){return h(a,b)}});return e}]}function Gd(){this.$get=["$window","$document",function(b,a){var c={},d=W((/android (\d+)/.exec(K((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),g=a[0]||{},f=g.documentMode,h,m=/^(Moz|webkit|O|ms)(?=[A-Z])/,k=g.body&&g.body.style,l=!1,n=!1;if(k){for(var p in k)if(l= 112 | m.exec(p)){h=l[0];h=h.substr(0,1).toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||h+"Transition"in k);n=!!("animation"in k||h+"Animation"in k);!d||l&&n||(l=u(g.body.style.webkitTransition),n=u(g.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hashchange:"onhashchange"in b&&(!f||7b;b=Math.abs(b);var f=b+"",h="",m=[],k=!1;if(-1!==f.indexOf("e")){var l=f.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?f="0":(h=f,k=!0)}if(k)0b)&&(h=b.toFixed(e));else{f=(f.split(Hc)[1]||"").length; 119 | x(e)&&(e=Math.min(Math.max(a.minFrac,f),a.maxFrac));f=Math.pow(10,e);b=Math.round(b*f)/f;b=(""+b).split(Hc);f=b[0];b=b[1]||"";var l=0,n=a.lgSize,p=a.gSize;if(f.length>=n+p)for(l=f.length-n,k=0;kb&&(d="-",b=-b); 120 | for(b=""+b;b.length-c)e+=c;0===e&&-12==c&&(e=12);return Lb(e,a,d)}}function lb(b,a){return function(c,d){var e=c["get"+b](),g=Ia(a?"SHORT"+b:b);return d[g][e]}}function Dc(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var g=0,f=0,h=b[8]?a.setUTCFullYear:a.setFullYear,m=b[8]?a.setUTCHours:a.setHours;b[9]&&(g=W(b[9]+b[10]),f=W(b[9]+b[11]));h.call(a,W(b[1]),W(b[2])-1,W(b[3])); 121 | g=W(b[4]||0)-g;f=W(b[5]||0)-f;h=W(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));m.call(a,g,f,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e){var g="",f=[],h,m;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;u(c)&&(c=Pd.test(c)?W(c):a(c));sb(c)&&(c=new Date(c));if(!La(c))return c;for(;e;)(m=Qd.exec(e))?(f=f.concat(va.call(m,1)),e=f.pop()):(f.push(e),e=null);q(f,function(a){h=Rd[a];g+=h?h(c,b.DATETIME_FORMATS): 122 | a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Kd(){return function(b){return qa(b,!0)}}function Ld(){return function(b,a){if(!M(b)&&!u(b))return b;a=W(a);if(u(b))return a?0<=a?b.slice(0,a):b.slice(a,b.length):"";var c=[],d,e;a>b.length?a=b.length:a<-b.length&&(a=-b.length);0a||37<=a&&40>=a)||k()});if(e.hasEvent("paste"))a.on("paste cut",k)}a.on("change",h);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)};var l=c.ngPattern;l&&((e=l.match(/^\/(.*)\/([gim]*)$/))?(l=RegExp(e[1],e[2]),e=function(a){return pa(d,"pattern",d.$isEmpty(a)||l.test(a),a)}):e=function(c){var e=b.$eval(l);if(!e||!e.test)throw w("ngPattern")("noregexp",l,e,ga(a));return pa(d,"pattern",d.$isEmpty(c)||e.test(c),c)},d.$formatters.push(e),d.$parsers.push(e));if(c.ngMinlength){var n= 128 | W(c.ngMinlength);e=function(a){return pa(d,"minlength",d.$isEmpty(a)||a.length>=n,a)};d.$parsers.push(e);d.$formatters.push(e)}if(c.ngMaxlength){var p=W(c.ngMaxlength);e=function(a){return pa(d,"maxlength",d.$isEmpty(a)||a.length<=p,a)};d.$parsers.push(e);d.$formatters.push(e)}}function Mb(b,a){b="ngClass"+b;return function(){return{restrict:"AC",link:function(c,d,e){function g(b){if(!0===a||c.$index%2===a){var d=f(b||"");h?ua(b,h)||e.$updateClass(d,f(h)):e.$addClass(d)}h=ba(b)}function f(a){if(M(a))return a.join(" "); 129 | if(X(a)){var b=[];q(a,function(a,c){a&&b.push(c)});return b.join(" ")}return a}var h;c.$watch(e[b],g,!0);e.$observe("class",function(a){g(c.$eval(e[b]))});"ngClass"!==b&&c.$watch("$index",function(d,g){var h=d&1;if(h!==g&1){var n=f(c.$eval(e[b]));h===a?e.$addClass(n):e.$removeClass(n)}})}}}}var K=function(b){return u(b)?b.toLowerCase():b},Od=Object.prototype.hasOwnProperty,Ia=function(b){return u(b)?b.toUpperCase():b},O,z,Da,va=[].slice,Sd=[].push,Ma=Object.prototype.toString,Oa=w("ng"),Ca=R.angular|| 130 | (R.angular={}),Va,Ha,ja=["0","0","0"];O=W((/msie (\d+)/.exec(K(navigator.userAgent))||[])[1]);isNaN(O)&&(O=W((/trident\/.*; rv:(\d+)/.exec(K(navigator.userAgent))||[])[1]));t.$inject=[];Ba.$inject=[];var aa=function(){return String.prototype.trim?function(b){return u(b)?b.trim():b}:function(b){return u(b)?b.replace(/^\s\s*/,"").replace(/\s\s*$/,""):b}}();Ha=9>O?function(b){b=b.nodeName?b:b[0];return b.scopeName&&"HTML"!=b.scopeName?Ia(b.scopeName+":"+b.nodeName):b.nodeName}:function(b){return b.nodeName? 131 | b.nodeName:b[0].nodeName};var Uc=/[A-Z]/g,Td={full:"1.2.13-build.2262+sha.a9fcb0d",major:1,minor:2,dot:13,codeName:"snapshot"},Sa=P.cache={},eb=P.expando="ng-"+(new Date).getTime(),Yc=1,Jc=R.document.addEventListener?function(b,a,c){b.addEventListener(a,c,!1)}:function(b,a,c){b.attachEvent("on"+a,c)},Ab=R.document.removeEventListener?function(b,a,c){b.removeEventListener(a,c,!1)}:function(b,a,c){b.detachEvent("on"+a,c)},Wc=/([\:\-\_]+(.))/g,Xc=/^moz([A-Z])/,xb=w("jqLite"),Ga=P.prototype={ready:function(b){function a(){c|| 132 | (c=!0,b())}var c=!1;"complete"===S.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),P(R).on("load",a))},toString:function(){var b=[];q(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?z(this[b]):z(this[this.length+b])},length:0,push:Sd,sort:[].sort,splice:[].splice},gb={};q("multiple selected checked disabled readOnly required open".split(" "),function(b){gb[K(b)]=b});var gc={};q("input select option textarea button form details".split(" "),function(b){gc[Ia(b)]= 133 | !0});q({data:cc,inheritedData:fb,scope:function(b){return z(b).data("$scope")||fb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return z(b).data("$isolateScope")||z(b).data("$isolateScopeNoTemplate")},controller:dc,injector:function(b){return fb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Bb,css:function(b,a,c){a=Ra(a);if(B(c))b.style[a]=c;else{var d;8>=O&&(d=b.currentStyle&&b.currentStyle[a],""===d&&(d="auto"));d=d||b.style[a];8>=O&&(d=""===d?s: 134 | d);return d}},attr:function(b,a,c){var d=K(a);if(gb[d])if(B(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||t).specified?d:s;else if(B(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?s:b},prop:function(b,a,c){if(B(c))b[a]=c;else return b[a]},text:function(){function b(b,d){var e=a[b.nodeType];if(x(d))return e?b[e]:"";b[e]=d}var a=[];9>O?(a[1]="innerText",a[3]="nodeValue"):a[1]=a[3]="textContent"; 135 | b.$dv="";return b}(),val:function(b,a){if(x(a)){if("SELECT"===Ha(b)&&b.multiple){var c=[];q(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(x(a))return b.innerHTML;for(var c=0,d=b.childNodes;c":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"&":function(a,c,d,e){return d(a,c)&e(a,c)},"|":function(a,c,d,e){return e(a,c)(a,c,d(a,c))},"!":function(a,c,d){return!d(a,c)}},Xd={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'}, 147 | Kb=function(a){this.options=a};Kb.prototype={constructor:Kb,lex:function(a){this.text=a;this.index=0;this.ch=s;this.lastCh=":";this.tokens=[];var c;for(a=[];this.index=a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"=== 150 | a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=B(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw za("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index","<=",">="))a=this.binaryFn(a,c.fn,this.relational());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.fn,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.fn,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(Za.ZERO,a.fn,this.unary()):(a=this.expect("!"))?this.unaryFn(a.fn,this.unary()): 162 | this.primary()},fieldAccess:function(a){var c=this,d=this.expect().text,e=xc(d,this.options,this.text);return D(function(c,d,h){return e(h||a(c,d))},{assign:function(e,f,h){return kb(a(e,h),d,f,c.text,c.options)}})},objectIndex:function(a){var c=this,d=this.expression();this.consume("]");return D(function(e,g){var f=a(e,g),h=d(e,g),m;if(!f)return s;(f=Ya(f[h],c.text))&&(f.then&&c.options.unwrapPromises)&&(m=f,"$$v"in f||(m.$$v=s,m.then(function(a){m.$$v=a})),f=f.$$v);return f},{assign:function(e, 163 | g,f){var h=d(e,f);return Ya(a(e,f),c.text)[h]=g}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this;return function(g,f){for(var h=[],m=c?c(g,f):g,k=0;ka.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Lb(Math[0=O&&(c.href||c.name||c.$set("href",""),a.append(S.createComment("IE fix")));if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){var g="[object SVGAnimatedString]"===Ma.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(g)||a.preventDefault()})}}}),Nb={};q(gb,function(a,c){if("multiple"!=a){var d=ma("ng-"+c);Nb[d]=function(){return{priority:100,link:function(a,g,f){a.$watch(f[d],function(a){f.$set(c,!!a)})}}}}});q(["src","srcset","href"],function(a){var c=ma("ng-"+a); 168 | Nb[c]=function(){return{priority:99,link:function(d,e,g){g.$observe(c,function(c){c&&(g.$set(a,c),O&&e.prop(a,g[a]))})}}}});var ob={$addControl:t,$removeControl:t,$setValidity:t,$setDirty:t,$setPristine:t};Ic.$inject=["$element","$attrs","$scope"];var Kc=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Ic,compile:function(){return{pre:function(a,e,g,f){if(!g.action){var h=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1};Jc(e[0],"submit", 169 | h);e.on("$destroy",function(){c(function(){Ab(e[0],"submit",h)},0,!1)})}var m=e.parent().controller("form"),k=g.name||g.ngForm;k&&kb(a,k,f,k);if(m)e.on("$destroy",function(){m.$removeControl(f);k&&kb(a,k,s,k);D(f,ob)})}}}}}]},Zd=Kc(),$d=Kc(!0),ae=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,be=/^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*$/i,ce=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,Lc={text:qb,number:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);e.$parsers.push(function(a){var c= 170 | e.$isEmpty(a);if(c||ce.test(a))return e.$setValidity("number",!0),""===a?null:c?a:parseFloat(a);e.$setValidity("number",!1);return s});e.$formatters.push(function(a){return e.$isEmpty(a)?"":""+a});d.min&&(a=function(a){var c=parseFloat(d.min);return pa(e,"min",e.$isEmpty(a)||a>=c,a)},e.$parsers.push(a),e.$formatters.push(a));d.max&&(a=function(a){var c=parseFloat(d.max);return pa(e,"max",e.$isEmpty(a)||a<=c,a)},e.$parsers.push(a),e.$formatters.push(a));e.$formatters.push(function(a){return pa(e,"number", 171 | e.$isEmpty(a)||sb(a),a)})},url:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);a=function(a){return pa(e,"url",e.$isEmpty(a)||ae.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},email:function(a,c,d,e,g,f){qb(a,c,d,e,g,f);a=function(a){return pa(e,"email",e.$isEmpty(a)||be.test(a),a)};e.$formatters.push(a);e.$parsers.push(a)},radio:function(a,c,d,e){x(d.name)&&c.attr("name",$a());c.on("click",function(){c[0].checked&&a.$apply(function(){e.$setViewValue(d.value)})});e.$render=function(){c[0].checked=d.value== 172 | e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e){var g=d.ngTrueValue,f=d.ngFalseValue;u(g)||(g=!0);u(f)||(f=!1);c.on("click",function(){a.$apply(function(){e.$setViewValue(c[0].checked)})});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return a!==g};e.$formatters.push(function(a){return a===g});e.$parsers.push(function(a){return a?g:f})},hidden:t,button:t,submit:t,reset:t,file:t},Mc=["$browser","$sniffer",function(a,c){return{restrict:"E",require:"?ngModel", 173 | link:function(d,e,g,f){f&&(Lc[K(g.type)]||Lc.text)(d,e,g,f,c,a)}}}],nb="ng-valid",mb="ng-invalid",Ja="ng-pristine",pb="ng-dirty",de=["$scope","$exceptionHandler","$attrs","$element","$parse",function(a,c,d,e,g){function f(a,c){c=c?"-"+db(c,"-"):"";e.removeClass((a?mb:nb)+c).addClass((a?nb:mb)+c)}this.$modelValue=this.$viewValue=Number.NaN;this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$name=d.name;var h=g(d.ngModel), 174 | m=h.assign;if(!m)throw w("ngModel")("nonassign",d.ngModel,ga(e));this.$render=t;this.$isEmpty=function(a){return x(a)||""===a||null===a||a!==a};var k=e.inheritedData("$formController")||ob,l=0,n=this.$error={};e.addClass(Ja);f(!0);this.$setValidity=function(a,c){n[a]!==!c&&(c?(n[a]&&l--,l||(f(!0),this.$valid=!0,this.$invalid=!1)):(f(!1),this.$invalid=!0,this.$valid=!1,l++),n[a]=!c,f(c,a),k.$setValidity(a,c,this))};this.$setPristine=function(){this.$dirty=!1;this.$pristine=!0;e.removeClass(pb).addClass(Ja)}; 175 | this.$setViewValue=function(d){this.$viewValue=d;this.$pristine&&(this.$dirty=!0,this.$pristine=!1,e.removeClass(Ja).addClass(pb),k.$setDirty());q(this.$parsers,function(a){d=a(d)});this.$modelValue!==d&&(this.$modelValue=d,m(a,d),q(this.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}}))};var p=this;a.$watch(function(){var c=h(a);if(p.$modelValue!==c){var d=p.$formatters,e=d.length;for(p.$modelValue=c;e--;)c=d[e](c);p.$viewValue!==c&&(p.$viewValue=c,p.$render())}return c})}],ee=function(){return{require:["ngModel", 176 | "^?form"],controller:de,link:function(a,c,d,e){var g=e[0],f=e[1]||ob;f.$addControl(g);a.$on("$destroy",function(){f.$removeControl(g)})}}},fe=$({require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Nc=function(){return{require:"?ngModel",link:function(a,c,d,e){if(e){d.required=!0;var g=function(a){if(d.required&&e.$isEmpty(a))e.$setValidity("required",!1);else return e.$setValidity("required",!0),a};e.$formatters.push(g);e.$parsers.unshift(g);d.$observe("required", 177 | function(){g(e.$viewValue)})}}}},ge=function(){return{require:"ngModel",link:function(a,c,d,e){var g=(a=/\/(.*)\//.exec(d.ngList))&&RegExp(a[1])||d.ngList||",";e.$parsers.push(function(a){if(!x(a)){var c=[];a&&q(a.split(g),function(a){a&&c.push(aa(a))});return c}});e.$formatters.push(function(a){return M(a)?a.join(", "):s});e.$isEmpty=function(a){return!a||!a.length}}}},he=/^(true|false|\d+)$/,ie=function(){return{priority:100,compile:function(a,c){return he.test(c.ngValue)?function(a,c,g){g.$set("value", 178 | a.$eval(g.ngValue))}:function(a,c,g){a.$watch(g.ngValue,function(a){g.$set("value",a)})}}}},je=ta(function(a,c,d){c.addClass("ng-binding").data("$binding",d.ngBind);a.$watch(d.ngBind,function(a){c.text(a==s?"":a)})}),ke=["$interpolate",function(a){return function(c,d,e){c=a(d.attr(e.$attr.ngBindTemplate));d.addClass("ng-binding").data("$binding",c);e.$observe("ngBindTemplate",function(a){d.text(a)})}}],le=["$sce","$parse",function(a,c){return function(d,e,g){e.addClass("ng-binding").data("$binding", 179 | g.ngBindHtml);var f=c(g.ngBindHtml);d.$watch(function(){return(f(d)||"").toString()},function(c){e.html(a.getTrustedHtml(f(d))||"")})}}],me=Mb("",!0),ne=Mb("Odd",0),oe=Mb("Even",1),pe=ta({compile:function(a,c){c.$set("ngCloak",s);a.removeClass("ng-cloak")}}),qe=[function(){return{scope:!0,controller:"@",priority:500}}],Oc={};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ma("ng-"+ 180 | a);Oc[c]=["$parse",function(d){return{compile:function(e,g){var f=d(g[c]);return function(c,d,e){d.on(K(a),function(a){c.$apply(function(){f(c,{$event:a})})})}}}}]});var re=["$animate",function(a){return{transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,g,f){var h,m;c.$watch(e.ngIf,function(g){Pa(g)?m||(m=c.$new(),f(m,function(c){c[c.length++]=S.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)})):(m&&(m.$destroy(),m=null),h&&(a.leave(vb(h.clone)), 181 | h=null))})}}}],se=["$http","$templateCache","$anchorScroll","$animate","$sce",function(a,c,d,e,g){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ca.noop,compile:function(f,h){var m=h.ngInclude||h.src,k=h.onload||"",l=h.autoscroll;return function(f,h,q,s,y){var z=0,v,G,L=function(){v&&(v.$destroy(),v=null);G&&(e.leave(G),G=null)};f.$watch(g.parseAsResourceUrl(m),function(g){var m=function(){!B(l)||l&&!f.$eval(l)||d()},q=++z;g?(a.get(g,{cache:c}).success(function(a){if(q=== 182 | z){var c=f.$new();s.template=a;a=y(c,function(a){L();e.enter(a,null,h,m)});v=c;G=a;v.$emit("$includeContentLoaded");f.$eval(k)}}).error(function(){q===z&&L()}),f.$emit("$includeContentRequested")):(L(),s.template=null)})}}}}],te=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,g){d.html(g.template);a(d.contents())(c)}}}],ue=ta({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),ve=ta({terminal:!0,priority:1E3}),we=["$locale", 183 | "$interpolate",function(a,c){var d=/{}/g;return{restrict:"EA",link:function(e,g,f){var h=f.count,m=f.$attr.when&&g.attr(f.$attr.when),k=f.offset||0,l=e.$eval(m)||{},n={},p=c.startSymbol(),r=c.endSymbol(),s=/^when(Minus)?(.+)$/;q(f,function(a,c){s.test(c)&&(l[K(c.replace("when","").replace("Minus","-"))]=g.attr(f.$attr[c]))});q(l,function(a,e){n[e]=c(a.replace(d,p+h+"-"+k+r))});e.$watch(function(){var c=parseFloat(e.$eval(h));if(isNaN(c))return"";c in l||(c=a.pluralCat(c-k));return n[c](e,g,!0)},function(a){g.text(a)})}}}], 184 | xe=["$parse","$animate",function(a,c){var d=w("ngRepeat");return{transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,link:function(e,g,f,h,m){var k=f.ngRepeat,l=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),n,p,r,s,y,B,v={$id:Fa};if(!l)throw d("iexp",k);f=l[1];h=l[2];(l=l[3])?(n=a(l),p=function(a,c,d){B&&(v[B]=a);v[y]=c;v.$index=d;return n(e,v)}):(r=function(a,c){return Fa(c)},s=function(a){return a});l=f.match(/^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/);if(!l)throw d("iidexp", 185 | f);y=l[3]||l[1];B=l[2];var G={};e.$watchCollection(h,function(a){var f,h,l=g[0],n,v={},u,C,w,x,Q,t,D=[];if(rb(a))Q=a,n=p||r;else{n=p||s;Q=[];for(w in a)a.hasOwnProperty(w)&&"$"!=w.charAt(0)&&Q.push(w);Q.sort()}u=Q.length;h=D.length=Q.length;for(f=0;fu;)x.pop().element.remove()}for(;A.length>J;)A.pop()[0].element.remove()}var k;if(!(k=t.match(d)))throw Ge("iexp",t,ga(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],p=c(k[3]||""),q=c(k[2]?k[1]:m),z=c(k[7]), 196 | w=k[8]?c(k[8]):null,A=[[{element:f,label:""}]];y&&(a(y)(e),y.removeClass("ng-scope"),y.remove());f.empty();f.on("change",function(){e.$apply(function(){var a,c=z(e)||[],d={},h,k,l,p,t,v,u;if(r)for(k=[],p=0,v=A.length;p@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide{display:none !important;}ng\\:form{display:block;}'); 203 | //# sourceMappingURL=angular.min.js.map 204 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | try { 2 | // 防止jquery冲突 3 | var $Q = jQuery.noConflict(); 4 | 5 | // 微信内置函数 6 | var WebMM = WebMM; 7 | // 放入样式和绑定angular 8 | var style = ''; 9 | $Q('body').prepend(style).attr('ng-controller', 'appCtrl'); 10 | 11 | 12 | var timer = setInterval(function () { 13 | if(angular) { 14 | 15 | 16 | var app = angular.module('app', []); 17 | app.controller('appCtrl', function ($scope, $compile, $sce, $timeout) { 18 | // 编译html的scope 19 | $scope.toHtml = function(html) { 20 | return $sce.trustAsHtml(html); 21 | }; 22 | 23 | var sender = {}; 24 | /** 25 | * 初始化 26 | */ 27 | sender.init = function () { 28 | var _this = this; 29 | 30 | // 设定触发区域 31 | var timer = setInterval(function () { 32 | var $trigger = $Q('[click="popupModifyAvatarWin"]'); 33 | if($trigger.length) { 34 | $trigger.removeAttr('click'); // 移除原生事件 35 | $trigger.on('click', function () { 36 | _this.show(_this.get()); 37 | }); 38 | clearInterval(timer); 39 | } 40 | },500); 41 | 42 | // 绑定发送按钮 43 | $Q('[click="sendMsg@.inputArea"]').on('click', function () { 44 | _this.postMsg(); 45 | }); 46 | }; 47 | 48 | /** 49 | * 显示列表 50 | * @param data 51 | */ 52 | sender.show = function (data) { 53 | // 展示列表页 54 | WebMM.chooseConversation($Q('#conv_filehelper')[0]); 55 | 56 | // 置入dom 57 | $timeout(function () { 58 | // 删除之前的 59 | $Q('.chatItem.me').remove(); 60 | 61 | // 改变标题 62 | $Q('#messagePanelTitle').text('群发信息'); 63 | // 修改描述 64 | $Q('.systemTip >span').html('勾选要发送的好友 或者 组,然后编辑内容发送。
顺便说一下,截图 和 文件发不鸟 ╮(╯﹏╰)╭'); 65 | 66 | $scope.$apply(function () { 67 | var d = (new Date()).valueOf(), 68 | items = 'items' + d; 69 | $scope.temp = {}; 70 | $scope.temp[items] = data; 71 | var html = '
' + 72 | '' + 73 | '' + 74 | '
' + 75 | '
' + 76 | '{{ $index+1 }}' + 77 | '' + 78 | '' + 79 | '' + 80 | '' + 81 | '' + 82 | '
'; 83 | 84 | var $html = $compile(html)($scope); 85 | $Q('.chatItem.you').before($html); 86 | }); 87 | },100); 88 | 89 | }; 90 | 91 | /** 92 | * 获取数据 93 | * @returns {arr} 94 | */ 95 | sender.get = function () { 96 | $Q('.addrButton ').trigger('click'); //通过触发所有分组按钮来获取完整列表 97 | 98 | var $items = $Q('[username]'), 99 | items = []; 100 | // 生成微信列表 101 | $Q.each($items, function (k, v) { 102 | var $Qv = $Q(v); 103 | var item = { 104 | username: $Qv.attr('username'), 105 | nickname: $Qv.find('.nickName').find('.name').html(), 106 | avatar: $Qv.find('img').attr('src'), 107 | type: 'private' 108 | }; 109 | // 筛分群组 110 | var isChatroom = /@chatroom/g.test(item.username); 111 | if(isChatroom) {item.type = 'chatroom'} 112 | 113 | // 过滤空数据 114 | var isUndefined = item.nickname === undefined; 115 | if(isUndefined) {return} 116 | 117 | items.push(item); 118 | }); 119 | 120 | // 过滤公众号 121 | var $items_public = $Q('.pointer').next().find('[username]'); 122 | $Q.each($items_public, function (k, v) { 123 | var $v = $Q(v); 124 | items.forEach(function (v1, k1) { 125 | var isMatch = $v.attr('username') === v1.username; 126 | if(isMatch) { 127 | v1.type = 'public'; 128 | return false; 129 | } 130 | }); 131 | }); 132 | 133 | // 返回去重后的数组 134 | return items.unique('nickname'); 135 | }; 136 | 137 | /** 138 | * 发送信息 139 | */ 140 | sender.postMsg = function () { 141 | // 如果不在群发状态,退出 142 | var isWorking = $Q('input.sender_input').length; 143 | if(!isWorking) { 144 | return; 145 | } 146 | 147 | // 获取发送内容 148 | var $checked = $Q('input.sender_input:checked'), 149 | $input = $Q('#textInput'), 150 | msg = $input.val(); 151 | 152 | // 没有内容和勾选,退出 153 | if(msg === '' || !$checked.length) { 154 | return; 155 | } 156 | 157 | if(!window.isProcess) { 158 | // 进入发送状态 159 | window.isProcess = true; 160 | $Q('#mask').html('正在启动..').fadeIn(); 161 | 162 | // 创建队列 163 | var queue = new QueueEnginer(700); 164 | 165 | // 循环建立发送队列 166 | $Q.each($checked, function (k, v) { 167 | queue.add(function () { 168 | // 展开模态窗口提示 169 | var currentNum = ++k, 170 | remainNum = $checked.length - currentNum; 171 | $Q('#mask').html('正在发送第'+ currentNum +'人,剩余'+ remainNum +'人..'); 172 | 173 | // 开始发送 174 | WebMM.chooseConversation(v); 175 | $input.val(msg); 176 | $Q('[click="sendMsg@.inputArea"]').click(); 177 | }); 178 | }); 179 | 180 | // 发送完毕 181 | var time =new Date().format('yyyy年MM月dd日 h:m:s'), 182 | report = msg + ' 【--发送给了'+ $checked.length +'人】' + time; 183 | queue.end(function () { 184 | console.log(report); 185 | WebMM.chooseConversation($Q('#conv_filehelper')[0]); 186 | window.isProcess = false; 187 | $Q('#mask').html('').fadeOut(); 188 | }); 189 | queue.start(); 190 | $input.val(report); 191 | } 192 | } 193 | 194 | // 启动 195 | sender.init(); 196 | }); 197 | 198 | angular.bootstrap(document, ['app']); 199 | 200 | clearInterval(timer); 201 | } 202 | },300); 203 | 204 | } catch (e) {console.error(e)} 205 | 206 | /** 207 | * 生成列表页 208 | * @array data 209 | */ 210 | /*function createItems(data) { 211 | // 移除之前的dom 212 | $Q('.chatItem.me').remove(); 213 | // 改变标题 214 | $Q('#messagePanelTitle').text('群发信息'); 215 | // 修改描述 216 | $Q('.systemTip >span').html('勾选要发送的好友 或者 组,然后编辑内容发送。
顺便说一下,截图 和 文件发不鸟 ╮(╯﹏╰)╭'); 217 | 218 | var $tip = $Q('.chatItem.you'), 219 | $html = ''; 220 | data.forEach(function (v) { 221 | var chatroom; 222 | v.type === 'chatroom' ? chatroom = '' : chatroom = ''; 223 | var html = '
' + 224 | ''+ chatroom +'' + 225 | ''+ v.nickname +'' + 226 | '' + 227 | '
'; 228 | 229 | $html += html; 230 | }); 231 | 232 | // 置入dom 233 | $tip.before($html).before($Q('[type="private"]')); 234 | }*/ 235 | 236 | /** 237 | * 函数队列 238 | * @param processTime 间隔时间 default 1000 239 | * @example 240 | * var queue = new QueueEnginer(2000); 241 | * queue.add(function () {console.log(1);}); 242 | * queue.add(function () {console.log(2);}); 243 | * queue.end(function(){alert('执行完毕');}); 244 | * queue.start(); 245 | */ 246 | function QueueEnginer(processTime) { 247 | this.Queue = []; // 队列数组 248 | this.processTime = processTime || 1000; 249 | } 250 | QueueEnginer.prototype = { 251 | // 创建队列 252 | add: function (fn) { 253 | this.Queue.push({ 254 | fn: fn 255 | }); 256 | }, 257 | // 处理队列 258 | process: function () { 259 | // 取出队列中的第一个 260 | // 并从this.Queue中删除这个事件 261 | var queue = this.Queue.shift(); 262 | 263 | // 如果队列已空,执行end() 264 | // 并退出运行 265 | if(!queue) { 266 | if(typeof this.endFun === 'function') { 267 | this.endFun(); 268 | } 269 | return; 270 | }; 271 | 272 | // 执行事件 273 | queue.fn(); 274 | 275 | // 清除当前queue 276 | queue = null; 277 | 278 | // 继续执行下一个队列 279 | this.start(); 280 | }, 281 | // 开始队列 282 | start: function () { 283 | var _this = this; 284 | // 执行当前queue 285 | setTimeout(function () { 286 | _this.process(); 287 | }, _this.processTime); 288 | }, 289 | endFun: null, 290 | // 队列结束回调 291 | end: function (fn) { 292 | if(typeof fn === 'function') { 293 | this.endFun = fn; 294 | } 295 | } 296 | } 297 | 298 | /** 299 | * 扩展日期函数 300 | * @param format 301 | * @returns {*} 302 | * @example var d =new Date().format('yyyy-MM-dd'); 303 | */ 304 | Date.prototype.format =function(format) 305 | { 306 | var o = { 307 | "M+" : this.getMonth()+1, //month 308 | "d+" : this.getDate(), //day 309 | "h+" : this.getHours(), //hour 310 | "m+" : this.getMinutes(), //minute 311 | "s+" : this.getSeconds(), //second 312 | "q+" : Math.floor((this.getMonth()+3)/3), //quarter 313 | "S" : this.getMilliseconds() //millisecond 314 | } 315 | if(/(y+)/.test(format)) format=format.replace(RegExp.$1, 316 | (this.getFullYear()+"").substr(4- RegExp.$1.length)); 317 | for(var k in o)if(new RegExp("("+ k +")").test(format)) 318 | format = format.replace(RegExp.$1, 319 | RegExp.$1.length==1? o[k] : 320 | ("00"+ o[k]).substr((""+ o[k]).length)); 321 | return format; 322 | } 323 | 324 | /** 325 | * 数组去重 326 | * @param key 327 | * @returns arr 328 | * @example var newArr = arr.unique('nickname'); 329 | */ 330 | Array.prototype.unique = function (key) { 331 | var key = key || null, temp; 332 | var hash = {}; 333 | 334 | this.forEach(function (v) { 335 | // 根据传入的key判断哪个作为唯一 336 | key ? temp = v[key] : temp = v; 337 | 338 | // 用v作为hash的key,这样重复的key会被覆盖的 339 | hash[temp] = v; 340 | }); 341 | 342 | // 恢复数组 343 | var arr = []; 344 | for(var i in hash) { 345 | arr.push(hash[i]); 346 | } 347 | 348 | return arr; 349 | } -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/icon.png -------------------------------------------------------------------------------- /img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/1.png -------------------------------------------------------------------------------- /img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/2.png -------------------------------------------------------------------------------- /img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/3.png -------------------------------------------------------------------------------- /img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/4.png -------------------------------------------------------------------------------- /img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/5.png -------------------------------------------------------------------------------- /img/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/demo.gif -------------------------------------------------------------------------------- /img/new-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/think2011/webchatHelper/84a9d6899150dd507eb5580d8bd0b9bfe89adab1/img/new-demo.gif -------------------------------------------------------------------------------- /init.js: -------------------------------------------------------------------------------- 1 | // 在当前页面注入脚本 2 | injectJs(chrome.extension.getURL('angular.min.js')); 3 | injectJs(chrome.extension.getURL('app.js')); 4 | 5 | /** 6 | * 将chrome环境的js插入到dom 7 | * @param srcFile chrome.extension.getURL('jquery.min.js'); 8 | */ 9 | function injectJs(srcFile) { 10 | var scr = document.createElement('script'); 11 | scr.src = srcFile; 12 | document.getElementsByTagName('head')[0].appendChild(scr); 13 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "微信群发助手", 3 | "manifest_version":2, 4 | "version": "1.5", 5 | "icons": {"128": "icon.png"}, 6 | "description": "就是给 好友 或者 公众号 或者 组 批量发信息呗 【作者:曾浩,邮箱:452125301@qq.com】", 7 | "content_scripts": [{ 8 | "matches": ["http://*.qq.com/*","https://*.qq.com/*"], 9 | "js": ["init.js"], 10 | "run_at": "document_end", 11 | "all_frames": true 12 | }], 13 | "browser_action": 14 | { 15 | "default_icon": "icon.png", 16 | "default_title": "微信群发助手【作者:曾浩,邮箱:452125301@qq.com】", 17 | "default_popup": "popup.html" 18 | }, 19 | "web_accessible_resources": [ 20 | "angular.min.js", 21 | "app.js" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Document 6 | 7 | 8 |

登陆微信网页版 http://wx.qq.com,点击自己的头像进入群发功能。

9 | 10 | --------------------------------------------------------------------------------