From 330bf2857396b15752afadb030c981a1cb2848fe Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Tue, 5 Feb 2019 22:13:41 -0500 Subject: Enhancement/js (#1344) * Attempt to add package json * Add initial typescript components * Convert remaining files * Remove some null checks * Reorganize folders * Add missing js and tests for file paths * Delete unused babelrc * Remove unused packages --- app/src/web/.gitignore | 25 + app/src/web/.idea/compiler.xml | 6 + app/src/web/.idea/encodings.xml | 4 + app/src/web/.idea/misc.xml | 6 + app/src/web/.idea/modules.xml | 8 + app/src/web/.idea/vcs.xml | 6 + app/src/web/.idea/watcherTasks.xml | 25 + app/src/web/README.md | 4 + app/src/web/assets/adblock.txt | 2347 +++++++++++++++++++ app/src/web/assets/css/components/round_icons.css | 4 + app/src/web/assets/css/components/round_icons.scss | 4 + app/src/web/assets/css/core/_base.scss | 107 + app/src/web/assets/css/core/_colors.scss | 18 + app/src/web/assets/css/core/_core_bg.scss | 86 + app/src/web/assets/css/core/_core_border.scss | 94 + app/src/web/assets/css/core/_core_messenger.scss | 20 + app/src/web/assets/css/core/_core_text.scss | 39 + app/src/web/assets/css/core/_main.scss | 6 + app/src/web/assets/css/core/_svg.scss | 74 + app/src/web/assets/css/core/core.css | 306 +++ app/src/web/assets/css/core/core.scss | 54 + app/src/web/assets/css/themes/.gitignore | 2 + app/src/web/assets/css/themes/custom.css | 338 +++ app/src/web/assets/css/themes/custom.scss | 14 + app/src/web/assets/css/themes/material_amoled.css | 338 +++ app/src/web/assets/css/themes/material_amoled.scss | 11 + app/src/web/assets/css/themes/material_dark.css | 338 +++ app/src/web/assets/css/themes/material_dark.scss | 10 + app/src/web/assets/css/themes/material_glass.css | 338 +++ app/src/web/assets/css/themes/material_glass.scss | 10 + app/src/web/assets/css/themes/material_light.css | 338 +++ app/src/web/assets/css/themes/material_light.scss | 15 + app/src/web/assets/js/click_a.js | 55 + app/src/web/assets/js/click_a.ts | 57 + app/src/web/assets/js/click_debugger.js | 14 + app/src/web/assets/js/click_debugger.ts | 15 + app/src/web/assets/js/context_a.js | 68 + app/src/web/assets/js/context_a.ts | 69 + app/src/web/assets/js/document_watcher.js | 24 + app/src/web/assets/js/document_watcher.ts | 27 + app/src/web/assets/js/header_badges.js | 8 + app/src/web/assets/js/header_badges.ts | 7 + app/src/web/assets/js/header_hider.js | 12 + app/src/web/assets/js/header_hider.ts | 17 + app/src/web/assets/js/media.js | 43 + app/src/web/assets/js/media.ts | 47 + app/src/web/assets/js/menu.js | 57 + app/src/web/assets/js/menu.ts | 59 + app/src/web/assets/js/notif_msg.js | 26 + app/src/web/assets/js/notif_msg.ts | 25 + app/src/web/assets/js/textarea_listener.js | 31 + app/src/web/assets/js/textarea_listener.ts | 31 + app/src/web/assets/pgl.yoyo.org.txt | 2409 ++++++++++++++++++++ app/src/web/assets/typings/frost.d.ts | 27 + app/src/web/package.json | 5 + app/src/web/tsconfig.json | 24 + 56 files changed, 8152 insertions(+) create mode 100644 app/src/web/.gitignore create mode 100644 app/src/web/.idea/compiler.xml create mode 100644 app/src/web/.idea/encodings.xml create mode 100644 app/src/web/.idea/misc.xml create mode 100644 app/src/web/.idea/modules.xml create mode 100644 app/src/web/.idea/vcs.xml create mode 100644 app/src/web/.idea/watcherTasks.xml create mode 100644 app/src/web/README.md create mode 100644 app/src/web/assets/adblock.txt create mode 100644 app/src/web/assets/css/components/round_icons.css create mode 100644 app/src/web/assets/css/components/round_icons.scss create mode 100644 app/src/web/assets/css/core/_base.scss create mode 100644 app/src/web/assets/css/core/_colors.scss create mode 100644 app/src/web/assets/css/core/_core_bg.scss create mode 100644 app/src/web/assets/css/core/_core_border.scss create mode 100644 app/src/web/assets/css/core/_core_messenger.scss create mode 100644 app/src/web/assets/css/core/_core_text.scss create mode 100644 app/src/web/assets/css/core/_main.scss create mode 100644 app/src/web/assets/css/core/_svg.scss create mode 100644 app/src/web/assets/css/core/core.css create mode 100644 app/src/web/assets/css/core/core.scss create mode 100644 app/src/web/assets/css/themes/.gitignore create mode 100644 app/src/web/assets/css/themes/custom.css create mode 100644 app/src/web/assets/css/themes/custom.scss create mode 100644 app/src/web/assets/css/themes/material_amoled.css create mode 100644 app/src/web/assets/css/themes/material_amoled.scss create mode 100644 app/src/web/assets/css/themes/material_dark.css create mode 100644 app/src/web/assets/css/themes/material_dark.scss create mode 100644 app/src/web/assets/css/themes/material_glass.css create mode 100644 app/src/web/assets/css/themes/material_glass.scss create mode 100644 app/src/web/assets/css/themes/material_light.css create mode 100644 app/src/web/assets/css/themes/material_light.scss create mode 100644 app/src/web/assets/js/click_a.js create mode 100644 app/src/web/assets/js/click_a.ts create mode 100644 app/src/web/assets/js/click_debugger.js create mode 100644 app/src/web/assets/js/click_debugger.ts create mode 100644 app/src/web/assets/js/context_a.js create mode 100644 app/src/web/assets/js/context_a.ts create mode 100644 app/src/web/assets/js/document_watcher.js create mode 100644 app/src/web/assets/js/document_watcher.ts create mode 100644 app/src/web/assets/js/header_badges.js create mode 100644 app/src/web/assets/js/header_badges.ts create mode 100644 app/src/web/assets/js/header_hider.js create mode 100644 app/src/web/assets/js/header_hider.ts create mode 100644 app/src/web/assets/js/media.js create mode 100644 app/src/web/assets/js/media.ts create mode 100644 app/src/web/assets/js/menu.js create mode 100644 app/src/web/assets/js/menu.ts create mode 100644 app/src/web/assets/js/notif_msg.js create mode 100644 app/src/web/assets/js/notif_msg.ts create mode 100644 app/src/web/assets/js/textarea_listener.js create mode 100644 app/src/web/assets/js/textarea_listener.ts create mode 100644 app/src/web/assets/pgl.yoyo.org.txt create mode 100644 app/src/web/assets/typings/frost.d.ts create mode 100644 app/src/web/package.json create mode 100644 app/src/web/tsconfig.json (limited to 'app/src/web') diff --git a/app/src/web/.gitignore b/app/src/web/.gitignore new file mode 100644 index 00000000..76a547ef --- /dev/null +++ b/app/src/web/.gitignore @@ -0,0 +1,25 @@ +node_modules/ +.sass-cache/ +package-lock.json + +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml diff --git a/app/src/web/.idea/compiler.xml b/app/src/web/.idea/compiler.xml new file mode 100644 index 00000000..1a2fb332 --- /dev/null +++ b/app/src/web/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/web/.idea/encodings.xml b/app/src/web/.idea/encodings.xml new file mode 100644 index 00000000..15a15b21 --- /dev/null +++ b/app/src/web/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/web/.idea/misc.xml b/app/src/web/.idea/misc.xml new file mode 100644 index 00000000..28a804d8 --- /dev/null +++ b/app/src/web/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/web/.idea/modules.xml b/app/src/web/.idea/modules.xml new file mode 100644 index 00000000..e2d63b96 --- /dev/null +++ b/app/src/web/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/web/.idea/vcs.xml b/app/src/web/.idea/vcs.xml new file mode 100644 index 00000000..c2365ab1 --- /dev/null +++ b/app/src/web/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/web/.idea/watcherTasks.xml b/app/src/web/.idea/watcherTasks.xml new file mode 100644 index 00000000..32d1e6f4 --- /dev/null +++ b/app/src/web/.idea/watcherTasks.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/web/README.md b/app/src/web/README.md new file mode 100644 index 00000000..29981033 --- /dev/null +++ b/app/src/web/README.md @@ -0,0 +1,4 @@ +# Frost for Facebook Assets + +This is the root project for the assets, which is primarily css and js. +The assets that will be added to Android are within the `assets` folder. diff --git a/app/src/web/assets/adblock.txt b/app/src/web/assets/adblock.txt new file mode 100644 index 00000000..a35d95c8 --- /dev/null +++ b/app/src/web/assets/adblock.txt @@ -0,0 +1,2347 @@ +# Ad server list for use with hosts files to block ads +# +# For more information about this list, see: https://pgl.yoyo.org/adservers/ +# ---- +# last updated: Wed, 12 Jul 2017 13:54:58 GMT +# entries: 2331 +# format: hosts (hosts -- in hosts file format) +# credits: Peter Lowe - pgl@yoyo.org - https://pgl.yoyo.org/ - https://twitter.com/pgl +# this URL: https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext&useip=0.0.0.0 +# other formats: https://pgl.yoyo.org/adservers/formats.php +# policy: https://pgl.yoyo.org/adservers/policy.php +# +# start date: Wed, 12 Jul 2017 00:00:00 +101com.com +101order.com +123found.com +180hits.de +180searchassistant.com +207.net +247media.com +24log.com +24log.de +24pm-affiliation.com +2mdn.net +2o7.net +360yield.com +4affiliate.net +4d5.net +50websads.com +518ad.com +51yes.com +600z.com +777partner.com +77tracking.com +7bpeople.com +7search.com +99count.com +a-ads.com +a-counter.kiev.ua +a.0day.kiev.ua +a.aproductmsg.com +a.collective-media.net +a.consumer.net +a.mktw.net +a.sakh.com +a.ucoz.net +a.ucoz.ru +a.xanga.com +a32.g.a.yimg.com +aaddzz.com +abacho.net +abc-ads.com +absoluteclickscom.com +abz.com +ac.rnm.ca +accounts.pkr.com.invalid +acsseo.com +actionsplash.com +actualdeals.com +acuityads.com +ad-balancer.at +ad-balancer.net +ad-center.com +ad-pay.de +ad-rotator.com +ad-server.gulasidorna.se +ad-serverparc.nl +ad-souk.com +ad-space.net +ad-tech.com +ad-up.com +ad.100.tbn.ru +ad.71i.de +ad.a8.net +ad.abcnews.com +ad.abctv.com +ad.aboutwebservices.com +ad.abum.com +ad.afy11.net +ad.allstar.cz +ad.altervista.org +ad.amgdgt.com +ad.anuntis.com +ad.auditude.com +ad.bizo.com +ad.bnmla.com +ad.bondage.com +ad.caradisiac.com +ad.centrum.cz +ad.cgi.cz +ad.choiceradio.com +ad.clix.pt +ad.cooks.com +ad.crwdcntrl.net +ad.digitallook.com +ad.directrev.com +ad.doctissimo.fr +ad.domainfactory.de +ad.e-kolay.net +ad.eurosport.com +ad.f1cd.ru +ad.flurry.com +ad.foxnetworks.com +ad.freecity.de +ad.gate24.ch +ad.globe7.com +ad.grafika.cz +ad.hbv.de +ad.hodomobile.com +ad.httpool.com +ad.hyena.cz +ad.iinfo.cz +ad.ilove.ch +ad.infoseek.com +ad.jamba.net +ad.jamster.co.uk +ad.jetsoftware.com +ad.keenspace.com +ad.leadbolt.net +ad.liveinternet.ru +ad.lupa.cz +ad.media-servers.net +ad.mediastorm.hu +ad.mgd.de +ad.musicmatch.com +ad.nachtagenten.de +ad.nozonedata.com +ad.nttnavi.co.jp +ad.nwt.cz +ad.onad.eu +ad.pandora.tv +ad.preferances.com +ad.profiwin.de +ad.prv.pl +ad.rambler.ru +ad.reunion.com +ad.scanmedios.com +ad.sensismediasmart.com.au +ad.seznam.cz +ad.simgames.net +ad.slutload.com +ad.smartclip.net +ad.tbn.ru +ad.technoratimedia.com +ad.thewheelof.com +ad.turn.com +ad.tv2.no +ad.twitchguru.com +ad.usatoday.com +ad.virtual-nights.com +ad.wavu.hu +ad.way.cz +ad.weatherbug.com +ad.wsod.com +ad.wz.cz +ad.yadro.ru +ad.yourmedia.com +ad.zanox.com +ad0.bigmir.net +ad01.mediacorpsingapore.com +ad1.emediate.dk +ad1.emule-project.org +ad1.kde.cz +ad1.pamedia.com.au +ad2.iinfo.cz +ad2.linxcz.cz +ad2.lupa.cz +ad2flash.com +ad2games.com +ad3.iinfo.cz +ad3.pamedia.com.au +ad4game.com +adaction.de +adadvisor.net +adap.tv +adapt.tv +adbanner.ro +adbard.net +adbers.com +adblade.com +adblockanalytics.com +adboost.de.vu +adboost.net +adbooth.net +adbot.com +adbrite.com +adbroker.de +adbunker.com +adbutler.com +adbutler.de +adbuyer.com +adbuyer3.lycos.com +adcash.com +adcast.deviantart.com +adcell.de +adcenter.mdf.se +adcenter.net +adcentriconline.com +adcept.net +adclick.com +adclient.uimserv.net +adclient1.tucows.com +adcomplete.com +adconion.com +adcontent.gamespy.com +adcycle.com +add.newmedia.cz +addealing.com +addfreestats.com +addme.com +adecn.com +ademails.com +adengage.com +adexchangeprediction.com +adexpose.com +adext.inkclub.com +adf.ly +adfactor.nl +adfarm.mediaplex.com +adflight.com +adforce.com +adform.com +adgardener.com +adgoto.com +adgridwork.com +adhese.be +adhese.com +adimage.asiaone.com.sg +adimage.guardian.co.uk +adimages.been.com +adimages.carsoup.com +adimages.go.com +adimages.homestore.com +adimages.omroepzeeland.nl +adimages.sanomawsoy.fi +adimg.cnet.com +adimg.com.com +adimg.uimserv.net +adimg1.chosun.com +adimgs.sapo.pt +adimpact.com +adinjector.net +adinterax.com +adisfy.com +adition.com +adition.de +adition.net +adizio.com +adjix.com +adjug.com +adjuggler.com +adjuggler.yourdictionary.com +adjustnetwork.com +adk2.com +adk2ads.tictacti.com +adland.ru +adlantic.nl +adledge.com +adlegend.com +adlog.com.com +adloox.com +adlooxtracking.com +adlure.net +admagnet.net +admailtiser.com +adman.gr +adman.in.gr +adman.otenet.gr +admanagement.ch +admanager.btopenworld.com +admanager.carsoup.com +admarketplace.net +admarvel.com +admax.nexage.com +admedia.com +admedia.ro +admeld.com +admerize.be +admeta.com +admex.com +adminder.com +adminshop.com +admized.com +admob.com +admonitor.com +admotion.com.ar +adnet-media.net +adnet.asahi.com +adnet.biz +adnet.de +adnet.ru +adnet.worldreviewer.com +adnetinteractive.com +adnetwork.net +adnetworkperformance.com +adnews.maddog2000.de +adnotch.com +adnxs.com +adocean.pl +adonspot.com +adoperator.com +adorigin.com +adpepper.dk +adpepper.nl +adperium.com +adpia.vn +adplus.co.id +adplxmd.com +adprofile.net +adprojekt.pl +adq.nextag.com +adrazzi.com +adreactor.com +adrecreate.com +adremedy.com +adreporting.com +adres.internet.com +adrevolver.com +adriver.ru +adrolays.de +adrotate.de +adrotator.se +adrta.com +ads-click.com +ads.4tube.com +ads.5ci.lt +ads.abovetopsecret.com +ads.aceweb.net +ads.activestate.com +ads.adfox.ru +ads.administrator.de +ads.adshareware.net +ads.adultfriendfinder.com +ads.adultswim.com +ads.advance.net +ads.adverline.com +ads.affiliates.match.com +ads.ak.facebook.com.edgesuite.net +ads.allvatar.com +ads.alt.com +ads.amdmb.com +ads.amigos.com +ads.aol.co.uk +ads.aol.com +ads.apn.co.nz +ads.appsgeyser.com +ads.as4x.tmcs.net +ads.as4x.tmcs.ticketmaster.com +ads.asia1.com.sg +ads.asiafriendfinder.com +ads.ask.com +ads.aspalliance.com +ads.avazu.net +ads.batpmturner.com +ads.beenetworks.net +ads.belointeractive.com +ads.berlinonline.de +ads.betanews.com +ads.betfair.com +ads.betfair.com.au +ads.bigchurch.com +ads.bigfoot.com +ads.bing.com +ads.bittorrent.com +ads.blog.com +ads.bloomberg.com +ads.bluelithium.com +ads.bluemountain.com +ads.bluesq.com +ads.bonniercorp.com +ads.boylesports.com +ads.brabys.com +ads.brazzers.com +ads.bumq.com +ads.businessweek.com +ads.canalblog.com +ads.canoe.ca +ads.casinocity.com +ads.cbc.ca +ads.cc +ads.cc-dt.com +ads.centraliprom.com +ads.cgnetworks.com +ads.channel4.com +ads.clearchannel.com +ads.co.com +ads.com.com +ads.contactmusic.com +ads.contentabc.com +ads.contextweb.com +ads.crakmedia.com +ads.creative-serving.com +ads.creativematch.com +ads.cricbuzz.com +ads.cybersales.cz +ads.dada.it +ads.datinggold.com +ads.datingyes.com +ads.dazoot.ro +ads.deltha.hu +ads.dennisnet.co.uk +ads.desmoinesregister.com +ads.detelefoongids.nl +ads.deviantart.com +ads.digital-digest.com +ads.digitalmedianet.com +ads.digitalpoint.com +ads.directionsmag.com +ads.domain.com +ads.domeus.com +ads.eagletribune.com +ads.easy-forex.com +ads.eatinparis.com +ads.economist.com +ads.edbindex.dk +ads.egrana.com.br +ads.einmedia.com +ads.electrocelt.com +ads.elitetrader.com +ads.emirates.net.ae +ads.epltalk.com +ads.eu.msn.com +ads.exactdrive.com +ads.expat-blog.biz +ads.expedia.com +ads.ezboard.com +ads.factorymedia.com +ads.fairfax.com.au +ads.faxo.com +ads.ferianc.com +ads.filmup.com +ads.financialcontent.com +ads.flooble.com +ads.fool.com +ads.footymad.net +ads.forbes.com +ads.forbes.net +ads.forium.de +ads.fortunecity.com +ads.fotosidan.se +ads.foxkidseurope.net +ads.foxnetworks.com +ads.foxnews.com +ads.freecity.de +ads.friendfinder.com +ads.ft.com +ads.futurenet.com +ads.gamecity.net +ads.gamershell.com +ads.gamespyid.com +ads.gamigo.de +ads.gaming-universe.de +ads.gawker.com +ads.geekswithblogs.net +ads.glispa.com +ads.gmodules.com +ads.godlikeproductions.com +ads.goyk.com +ads.gplusmedia.com +ads.gradfinder.com +ads.grindinggears.com +ads.groundspeak.com +ads.gsm-exchange.com +ads.gsmexchange.com +ads.guardian.co.uk +ads.guardianunlimited.co.uk +ads.guru3d.com +ads.hardwaresecrets.com +ads.harpers.org +ads.hbv.de +ads.hearstmags.com +ads.heartlight.org +ads.heias.com +ads.hideyourarms.com +ads.hollywood.com +ads.horsehero.com +ads.horyzon-media.com +ads.iafrica.com +ads.ibest.com.br +ads.ibryte.com +ads.icq.com +ads.ign.com +ads.img.co.za +ads.imgur.com +ads.indiatimes.com +ads.infi.net +ads.internic.co.il +ads.ipowerweb.com +ads.isoftmarketing.com +ads.itv.com +ads.iwon.com +ads.jewishfriendfinder.com +ads.jiwire.com +ads.jobsite.co.uk +ads.jpost.com +ads.jubii.dk +ads.justhungry.com +ads.kaktuz.net +ads.kelbymediagroup.com +ads.kinobox.cz +ads.kinxxx.com +ads.kompass.com +ads.krawall.de +ads.lesbianpersonals.com +ads.linuxfoundation.org +ads.linuxjournal.com +ads.linuxsecurity.com +ads.livenation.com +ads.mariuana.it +ads.massinfra.nl +ads.mcafee.com +ads.mediaodyssey.com +ads.medienhaus.de +ads.mgnetwork.com +ads.mmania.com +ads.moceanads.com +ads.motor-forum.nl +ads.motormedia.nl +ads.msn.com +ads.multimania.lycos.fr +ads.nationalgeographic.com +ads.ncm.com +ads.netmechanic.com +ads.networksolutions.com +ads.newdream.net +ads.newgrounds.com +ads.newmedia.cz +ads.newsint.co.uk +ads.newsquest.co.uk +ads.ninemsn.com.au +ads.nj.com +ads.nola.com +ads.nordichardware.com +ads.nordichardware.se +ads.nwsource.com +ads.nyi.net +ads.nytimes.com +ads.nyx.cz +ads.nzcity.co.nz +ads.o2.pl +ads.oddschecker.com +ads.okcimg.com +ads.ole.com +ads.olivebrandresponse.com +ads.oneplace.com +ads.ookla.com +ads.optusnet.com.au +ads.outpersonals.com +ads.passion.com +ads.pennet.com +ads.penny-arcade.com +ads.pheedo.com +ads.phpclasses.org +ads.pickmeup-ltd.com +ads.planet.nl +ads.pni.com +ads.pof.com +ads.powweb.com +ads.primissima.it +ads.printscr.com +ads.prisacom.com +ads.program3.com +ads.psd2html.com +ads.pushplay.com +ads.quoka.de +ads.rcs.it +ads.recoletos.es +ads.rediff.com +ads.redlightcenter.com +ads.redtube.com +ads.resoom.de +ads.returnpath.net +ads.s3.sitepoint.com +ads.satyamonline.com +ads.savannahnow.com +ads.saymedia.com +ads.scifi.com +ads.seniorfriendfinder.com +ads.servebom.com +ads.sexinyourcity.com +ads.shizmoo.com +ads.shopstyle.com +ads.sift.co.uk +ads.silverdisc.co.uk +ads.slim.com +ads.smartclick.com +ads.soft32.com +ads.space.com +ads.sptimes.com +ads.stackoverflow.com +ads.sun.com +ads.supplyframe.com +ads.t-online.de +ads.tahono.com +ads.techtv.com +ads.telegraph.co.uk +ads.themovienation.com +ads.thestar.com +ads.tmcs.net +ads.totallyfreestuff.com +ads.townhall.com +ads.trinitymirror.co.uk +ads.tripod.com +ads.tripod.lycos.co.uk +ads.tripod.lycos.de +ads.tripod.lycos.es +ads.tripod.lycos.it +ads.tripod.lycos.nl +ads.tripod.spray.se +ads.tso.dennisnet.co.uk +ads.uknetguide.co.uk +ads.ultimate-guitar.com +ads.uncrate.com +ads.undertone.com +ads.usatoday.com +ads.v3.com +ads.verticalresponse.com +ads.vgchartz.com +ads.videosz.com +ads.virtual-nights.com +ads.virtualcountries.com +ads.vnumedia.com +ads.waps.cn +ads.wapx.cn +ads.weather.ca +ads.web.aol.com +ads.web.cs.com +ads.web.de +ads.webmasterpoint.org +ads.websiteservices.com +ads.whi.co.nz +ads.whoishostingthis.com +ads.wiezoekje.nl +ads.wikia.nocookie.net +ads.wineenthusiast.com +ads.wwe.biz +ads.xhamster.com +ads.xtra.co.nz +ads.y-0.net +ads.yahoo.com +ads.yimg.com +ads.yldmgrimg.net +ads.yourfreedvds.com +ads.youtube.com +ads.zdnet.com +ads.ztod.com +ads03.redtube.com +ads1.canoe.ca +ads1.mediacapital.pt +ads1.msn.com +ads1.rne.com +ads1.virtual-nights.com +ads10.speedbit.com +ads180.com +ads2.brazzers.com +ads2.clearchannel.com +ads2.contentabc.com +ads2.gamecity.net +ads2.jubii.dk +ads2.net-communities.co.uk +ads2.oneplace.com +ads2.rne.com +ads2.virtual-nights.com +ads2.xnet.cz +ads2004.treiberupdate.de +ads3.contentabc.com +ads3.gamecity.net +ads3.virtual-nights.com +ads4.clearchannel.com +ads4.gamecity.net +ads4.virtual-nights.com +ads4homes.com +ads5.canoe.ca +ads5.virtual-nights.com +ads6.gamecity.net +ads7.gamecity.net +ads8.com +adsatt.abc.starwave.com +Adsatt.ABCNews.starwave.com +adsatt.espn.go.com +adsatt.espn.starwave.com +Adsatt.go.starwave.com +adsby.bidtheatre.com +adscale.de +adscholar.com +adscience.nl +adscpm.com +adsdaq.com +adsdk.com +adsend.de +adserv.evo-x.de +adserv.gamezone.de +adserv.iafrica.com +adserv.qconline.com +adserve.ams.rhythmxchange.com +adserver-live.yoc.mobi +adserver.43plc.com +adserver.71i.de +adserver.adultfriendfinder.com +adserver.aidameter.com +adserver.aol.fr +adserver.beggarspromo.com +adserver.betandwin.de +adserver.bing.com +adserver.bizhat.com +adserver.break-even.it +adserver.cams.com +adserver.com +adserver.digitoday.com +adserver.dotcommedia.de +adserver.finditquick.com +adserver.flossiemediagroup.com +adserver.freecity.de +adserver.freenet.de +adserver.friendfinder.com +adserver.hardsextube.com +adserver.hardwareanalysis.com +adserver.html.it +adserver.irishwebmasterforum.com +adserver.janes.com +adserver.libero.it +adserver.news.com.au +adserver.ngz-network.de +adserver.nydailynews.com +adserver.o2.pl +adserver.oddschecker.com +adserver.omroepzeeland.nl +adserver.pl +adserver.portalofevil.com +adserver.portugalmail.net +adserver.portugalmail.pt +adserver.sanomawsoy.fi +adserver.sciflicks.com +adserver.sharewareonline.com +adserver.spankaway.com +adserver.startnow.com +adserver.theonering.net +adserver.twitpic.com +adserver.viagogo.com +adserver.virginmedia.com +adserver.yahoo.com +adserver01.de +adserver1-images.backbeatmedia.com +adserver1.backbeatmedia.com +adserver1.mindshare.de +adserver1.ogilvy-interactive.de +adserver2.mindshare.de +adserverplus.com +adserversolutions.com +adservinginternational.com +adsfac.eu +adsfac.net +adsfac.us +adshost1.com +adside.com +adsk2.co +adskape.ru +adsklick.de +adsmarket.com +adsmart.co.uk +adsmart.com +adsmart.net +adsmogo.com +adsnative.com +adsoftware.com +adsoldier.com +adsonar.com +adspace.ro +adspeed.net +adspirit.de +adsponse.de +adsremote.scrippsnetworks.com +adsrevenue.net +adsrv.deviantart.com +adsrv.eacdn.com +adsrv.iol.co.za +adsrvr.org +adsstat.com +adstat.4u.pl +adstest.weather.com +adsupply.com +adsymptotic.com +adsynergy.com +adsys.townnews.com +adsystem.simplemachines.org +adtech.de +adtechus.com +adtegrity.net +adthis.com +adtiger.de +adtoll.com +adtology.com +adtoma.com +adtrace.org +adtrade.net +adtrading.de +adtrak.net +adtriplex.com +adultadvertising.com +adv-adserver.com +adv-banner.libero.it +adv.cooperhosting.net +adv.freeonline.it +adv.hwupgrade.it +adv.livedoor.com +adv.webmd.com +adv.wp.pl +adv.yo.cz +advariant.com +adventory.com +advert.bayarea.com +advert.dyna.ultraweb.hu +adverticum.com +adverticum.net +adverticus.de +advertise.com +advertiseireland.com +advertisespace.com +advertising.com +advertising.guildlaunch.net +advertisingbanners.com +advertisingbox.com +advertisingtag.net +advertmarket.com +advertmedia.de +advertpro.sitepoint.com +advertpro.ya.com +adverts.carltononline.com +advertserve.com +advertstream.com +advertwizard.com +advideo.uimserv.net +adview.ppro.de +advisormedia.cz +adviva.net +advnt.com +adwareremovergold.com +adwhirl.com +adwitserver.com +adworldnetwork.com +adworx.at +adworx.be +adworx.nl +adx.allstar.cz +adx.atnext.com +adxpansion.com +adxpose.com +adxvalue.com +adyea.com +adzerk.net +adzerk.s3.amazonaws.com +adzones.com +af-ad.co.uk +affbuzzads.com +affili.net +affiliate.1800flowers.com +affiliate.doubleyourdating.com +affiliate.dtiserv.com +affiliate.gamestop.com +affiliate.mercola.com +affiliate.mogs.com +affiliate.offgamers.com +affiliate.travelnow.com +affiliate.viator.com +affiliatefuel.com +affiliatefuture.com +affiliates.allposters.com +affiliates.babylon.com +affiliates.digitalriver.com +affiliates.globat.com +affiliates.internationaljock.com +affiliates.streamray.com +affiliates.thinkhost.net +affiliates.thrixxx.com +affiliates.ultrahosting.com +affiliatetracking.com +affiliatetracking.net +affiliatewindow.com +affiliation-france.com +afftracking.justanswer.com +ah-ha.com +ahalogy.com +aidu-ads.de +aim4media.com +aistat.net +aktrack.pubmatic.com +alclick.com +alenty.com +alexa-sitestats.s3.amazonaws.com +alipromo.com +all4spy.com +alladvantage.com +allosponsor.com +amazingcounters.com +amazon-adsystem.com +americash.com +amung.us +an.tacoda.net +anahtars.com +analytics.adpost.org +analytics.google.com +analytics.live.com +analytics.yahoo.com +anm.intelli-direct.com +annonser.dagbladet.no +api.intensifier.de +apture.com +arc1.msn.com +arcadebanners.com +ard.xxxblackbook.com +are-ter.com +as.webmd.com +as1.advfn.com +assets1.exgfnetwork.com +assoc-amazon.com +at-adserver.alltop.com +atdmt.com +athena-ads.wikia.com +atwola.com +auctionads.com +auctionads.net +audience2media.com +audit.median.hu +audit.webinform.hu +auto-bannertausch.de +autohits.dk +avenuea.com +avpa.javalobby.org +avres.net +avsads.com +awempire.com +awin1.com +azfront.com +b-1st.com +b.aol.com +b.engadget.com +ba.afl.rakuten.co.jp +babs.tv2.dk +backbeatmedia.com +banik.redigy.cz +banner-exchange-24.de +banner.ad.nu +banner.ambercoastcasino.com +banner.blogranking.net +banner.buempliz-online.ch +banner.casino.net +banner.casinodelrio.com +banner.cotedazurpalace.com +banner.coza.com +banner.cz +banner.easyspace.com +banner.elisa.net +banner.eurogrand.com +banner.featuredusers.com +banner.getgo.de +banner.goldenpalace.com +banner.img.co.za +banner.inyourpocket.com +banner.kiev.ua +banner.linux.se +banner.media-system.de +banner.mindshare.de +banner.nixnet.cz +banner.noblepoker.com +banner.northsky.com +banner.orb.net +banner.penguin.cz +banner.rbc.ru +banner.relcom.ru +banner.tanto.de +banner.titan-dsl.de +banner.vadian.net +banner.webmersion.com +banner.wirenode.com +bannerads.de +bannerboxes.com +bannercommunity.de +bannerconnect.com +bannerconnect.net +bannerexchange.cjb.net +bannerflow.com +bannergrabber.internet.gr +bannerhost.com +bannerimage.com +bannerlandia.com.ar +bannermall.com +bannermarkt.nl +bannerpower.com +banners.adultfriendfinder.com +banners.amigos.com +banners.asiafriendfinder.com +banners.audioholics.com +banners.babylon-x.com +banners.bol.com.br +banners.cams.com +banners.clubseventeen.com +banners.czi.cz +banners.dine.com +banners.direction-x.com +banners.directnic.com +banners.easydns.com +banners.freett.com +banners.friendfinder.com +banners.getiton.com +banners.iq.pl +banners.isoftmarketing.com +banners.lifeserv.com +banners.linkbuddies.com +banners.passion.com +banners.resultonline.com +banners.sexsearch.com +banners.sys-con.com +banners.thomsonlocal.com +banners.videosz.com +banners.virtuagirlhd.com +banners.wunderground.com +bannerserver.com +bannersgomlm.com +bannershotlink.perfectgonzo.com +bannersng.yell.com +bannerspace.com +bannerswap.com +bannertesting.com +bannery.cz +bannieres.acces-contenu.com +bans.adserver.co.il +bans.bride.ru +barnesandnoble.bfast.com +basebanner.com +baypops.com +bbelements.com +bbn.img.com.ua +begun.ru +belstat.com +belstat.nl +berp.com +best-pr.info +best-top.ro +bestsearch.net +bhclicks.com +bidclix.com +bidclix.net +bidswitch.net +bidtrk.com +bidvertiser.com +bigbangmedia.com +bigclicks.com +billboard.cz +bitads.net +bitmedianetwork.com +bizad.nikkeibp.co.jp +bizrate.com +blast4traffic.com +blingbucks.com +blogads.com +blogcounter.de +blogherads.com +blogrush.com +blogtoplist.se +blogtopsites.com +blueadvertise.com +bluekai.com +bluelithium.com +bluewhaleweb.com +bm.annonce.cz +bn.bfast.com +boersego-ads.de +boldchat.com +boom.ro +boomads.com +boost-my-pr.de +box.anchorfree.net +bpath.com +braincash.com +brandreachsys.com +bravenet.com.invalid +bridgetrack.com +brightinfo.com +british-banners.com +bs.yandex.ru +bttrack.com +budsinc.com +bullseye.backbeatmedia.com +buyhitscheap.com +buysellads.com +buzzonclick.com +bvalphaserver.com +bwp.download.com +c.bigmir.net +c1.nowlinux.com +c1exchange.com +campaign.bharatmatrimony.com +caniamedia.com +carbonads.com +carbonads.net +casalemedia.com +casalmedia.com +cash4members.com +cash4popup.de +cashcrate.com +cashengines.com +cashfiesta.com +cashlayer.com +cashpartner.com +casinogames.com +casinopays.com +casinorewards.com +casinotraffic.com +casinotreasure.com +cbanners.virtuagirlhd.com +cbmall.com +cdn.freefacti.com +cdn.freefarcy.com +cecash.com +centerpointmedia.com +ceskydomov.alias.ngs.modry.cz +cetrk.com +cgicounter.puretec.de +ch.questionmarket.com +chameleon.ad +channelintelligence.com +chart.dk +chartbeat.com +chartbeat.net +checkm8.com +checkstat.nl +chestionar.ro +chitika.net +cibleclick.com.invalid +cityads.telus.net +cj.com +cjbmanagement.com +cjlog.com +claria.com +class-act-clicks.com +click.absoluteagency.com +click.fool.com +click.kmindex.ru +click2freemoney.com +click2paid.com +clickability.com +clickadz.com +clickagents.com +clickbank.com +clickbank.net +clickbooth.com +clickboothlnk.com +clickbrokers.com +clickcompare.co.uk +clickdensity.com +clickedyclick.com +clickhereforcellphones.com +clickhouse.com +clickhype.com +clicklink.jp +clickmedia.ro +clickonometrics.pl +clicks.equantum.com +clicks.mods.de +clickserve.cc-dt.com +clicksor.com +clicktag.de +clickthruserver.com +clickthrutraffic.com +clicktrace.info +clicktrack.ziyu.net +clicktracks.com +clicktrade.com +clickxchange.com +clickz.com +clickzxc.com +clicmanager.fr +clientmetrics-pa.googleapis.com +clients.tbo.com +clixgalore.com +clk.konflab.com +clkads.com +clkrev.com +cluster.adultworld.com +clustrmaps.com +cmpstar.com +cnomy.com +cnt.spbland.ru +cnt1.pocitadlo.cz +code-server.biz +colonize.com +comclick.com +commindo-media-ressourcen.de +commissionmonster.com +compactbanner.com +comprabanner.it +confirmed-profits.com +connextra.com +contaxe.de +content.acc-hd.de +content.ad +contextweb.com +conversantmedia.com +conversionruler.com +cookies.cmpnet.com +coremetrics.com +count.rbc.ru +count.rin.ru +count.west263.com +counted.com +counter.bloke.com +counter.cnw.cz +counter.cz +counter.dreamhost.com +counter.fateback.com +counter.mirohost.net +counter.mojgorod.ru +counter.nowlinux.com +counter.rambler.ru +counter.search.bg +counter.sparklit.com +counter.yadro.ru +counters.honesty.com +counting.kmindex.ru +counts.tucows.com +coupling-media.de +cpalead.com +cpays.com +cpmaffiliation.com +cpmstar.com +cpxinteractive.com +cqcounter.com +crakmedia.com +craktraffic.com +crawlability.com +crazypopups.com +creafi-online-media.com +creative.whi.co.nz +creatives.as4x.tmcs.net +creatives.livejasmin.com +crispads.com +criteo.com +crowdgravity.com +crtv.mate1.com +crwdcntrl.net +ctnetwork.hu +cubics.com +customad.cnn.com +cyberbounty.com +cybermonitor.com +d.adroll.com +dakic-ia-300.com +danban.com +dapper.net +datashreddergold.com +dbbsrv.com +dc-storm.com +de17a.com +dealdotcom.com +debtbusterloans.com +decknetwork.net +deloo.de +demandbase.com +demdex.net +di1.shopping.com +dialerporn.com +didtheyreadit.com +direct-xxx-access.com +directaclick.com +directivepub.com +directleads.com +directorym.com +directtrack.com +discountclick.com +displayadsmedia.com +dist.belnk.com +dmtracker.com +dmtracking.alibaba.com +dmtracking2.alibaba.com +dnads.directnic.com +domaining.in +domainsponsor.com +domainsteam.de +domdex.com +doubleclick.com +doubleclick.de +doubleclick.net +doublepimp.com +drumcash.com +dynamic.fmpub.net +e-adimages.scrippsnetworks.com +e-bannerx.com +e-debtconsolidation.com +e-m.fr +e-n-t-e-r-n-e-x.com +e-planning.net +e.kde.cz +eadexchange.com +eas.almamedia.fi +easyhits4u.com +ebayadvertising.com +ebocornac.com +ebuzzing.com +ecircle-ag.com +eclick.vn +ecoupons.com +edgeio.com +effectivemeasure.com +effectivemeasure.net +eiv.baidu.com +elitedollars.com +elitetoplist.com +emarketer.com +emediate.dk +emediate.eu +engine.espace.netavenir.com +enginenetwork.com +enoratraffic.com +enquisite.com +entercasino.com +entrecard.s3.amazonaws.com +eqads.com +ero-advertising.com +esellerate.net +estat.com +etahub.com +etargetnet.com +etracker.de +eu-adcenter.net +eu1.madsone.com +eur.a1.yimg.com +eurekster.com +euroclick.com +euros4click.de +eusta.de +evergage.com +evidencecleanergold.com +ewebcounter.com +exchange-it.com +exchange.bg +exchangead.com +exchangeclicksonline.com +exelator.com +exit76.com +exitexchange.com +exitfuel.com +exoclick.com +exogripper.com +experteerads.com +exponential.com +express-submit.de +extractorandburner.com +extreme-dm.com +extremetracking.com +eyeblaster.com +eyereturn.com +eyeviewads.com +eyewonder.com +ezula.com +f5biz.com +fast-adv.it +fastclick.com +fastclick.com.edgesuite.net +fastclick.net +fb-promotions.com +fc.webmasterpro.de +feedbackresearch.com +feedjit.com +ffxcam.fairfax.com.au +fimc.net +fimserve.com +findcommerce.com +findyourcasino.com +fineclicks.com +first.nova.cz +firstlightera.com +flashtalking.com +fleshlightcash.com +flexbanner.com +flowgo.com +flurry.com +fonecta.leiki.com +foo.cosmocode.de +forex-affiliate.net +fpctraffic.com +fpctraffic2.com +fragmentserv.iac-online.de +free-banners.com +freebanner.com +freelogs.com +freeonlineusers.com +freepay.com +freestats.com +freestats.tv +freewebcounter.com +funklicks.com +funpageexchange.com +fusionads.net +fusionquest.com +fxstyle.net +galaxien.com +game-advertising-online.com +gamehouse.com +gamesites100.net +gamesites200.com +gamesitestop100.com +gator.com +gbanners.hornymatches.com +gemius.pl +geo.digitalpoint.com +geobanner.adultfriendfinder.com +geovisite.com +getclicky.com +globalismedia.com +globaltakeoff.net +globaltrack.com.invalid +globe7.com +globus-inter.com +gmads.net +go-rank.de +goingplatinum.com +goldstats.com +google-analytics.com +googleadservices.com +googleads.g.doubleclick.net +googlesyndication.com +gostats.com +gp.dejanews.com +gpr.hu +grafstat.ro +grapeshot.co.uk +greystripe.com +gtop100.com +gunggo.com +harrenmedia.com +harrenmedianetwork.com +havamedia.net +heias.com +hentaicounter.com +herbalaffiliateprogram.com +hexusads.fluent.ltd.uk +heyos.com +hgads.com +hidden.gogoceleb.com +hightrafficads.com +histats.com +hit-parade.com +hit.bg +hit.ua +hit.webcentre.lycos.co.uk +hitbox.com +hitcents.com +hitfarm.com +hitiz.com +hitlist.ru +hitlounge.com +hitometer.com +hits.europuls.eu +hits.informer.com +hits.puls.lv +hits.theguardian.com +hits4me.com +hits4pay.com +hitslink.com +hittail.com +hollandbusinessadvertising.nl +homepageking.de +hostedads.realitykings.com +hotjar.com +hotkeys.com +hotlog.ru +hotrank.com.tw +hs-analytics.net +htmlhubing.xyz +httpool.com +hurricanedigitalmedia.com +hydramedia.com +hyperbanner.net +hypertracker.com +i-clicks.net +i.xx.openx.com +i1img.com +i1media.no +ia.iinfo.cz +iad.anm.co.uk +iadnet.com +iasds01.com +iconadserver.com +icptrack.com +idcounter.com +identads.com +idregie.com +idtargeting.com +ientrymail.com +iesnare.com +ifa.tube8live.com +ilbanner.com +ilead.itrack.it +ilovecheating.com +imageads.canoe.ca +imagecash.net +images-pw.secureserver.net +images.v3.com +imarketservices.com +img.prohardver.hu +imgpromo.easyrencontre.com +imonitor.nethost.cz +imprese.cz +impressionmedia.cz +impressionz.co.uk +imrworldwide.com +inboxdollars.com +incentaclick.com +indexstats.com +indieclick.com +industrybrains.com +inetlog.ru +infinite-ads.com +infinityads.com +infolinks.com +information.com +inringtone.com +insightexpress.com +insightexpressai.com +instantmadness.com +intelliads.com +intellitxt.com +interactive.forthnet.gr +intergi.com +internetfuel.com +interreklame.de +interstat.hu +ip.ro +ip193.cn +iperceptions.com +ipro.com +ireklama.cz +itfarm.com +itop.cz +its-that-easy.com +itsptp.com +jcount.com +jinkads.de +joetec.net +js.users.51.la +juicyads.com +jumptap.com +justrelevant.com +justwebads.com +k.iinfo.cz +kanoodle.com +keymedia.hu +kindads.com +kissmetrics.com +kliks.nl +kniverto.com +komoona.com +kompasads.com +kontera.com +kt-g.de +ktu.sv2.biz +lakequincy.com +launchbit.com +layer-ad.de +layer-ads.de +lbn.ru +lct.salesforce.com +lead-analytics.nl +leadboltads.net +leadclick.com +leadingedgecash.com +leadzupc.com +levelrate.de +lfstmedia.com +liftdna.com +ligatus.com +ligatus.de +lightningcast.net +lightspeedcash.com +link-booster.de +link4ads.com +linkadd.de +linkbuddies.com +linkexchange.com +linkprice.com +linkrain.com +linkreferral.com +links-ranking.de +linkshighway.com +linkstorms.com +linkswaper.com +linktarget.com +liquidad.narrowcastmedia.com +liveintent.com +liverail.com +loading321.com +log.btopenworld.com +logua.com +lop.com +lucidmedia.com +lzjl.com +m.webtrends.com +m1.webstats4u.com +m4n.nl +mackeeperapp.mackeeper.com +madclient.uimserv.net +madisonavenue.com +mads.cnet.com +madvertise.de +marchex.com +market-buster.com +marketing.888.com +marketing.hearstmagazines.nl +marketing.nyi.net +marketing.osijek031.com +marketingsolutions.yahoo.com +maroonspider.com +mas.sector.sk +mastermind.com +matchcraft.com +mathtag.com +max.i12.de +maximumcash.com +mbn.com.ua +mbs.megaroticlive.com +mbuyu.nl +mdotm.com +measuremap.com +media-adrunner.mycomputer.com +media-servers.net +media.ftv-publicite.fr +media.funpic.de +media6degrees.com +mediaarea.eu +mediacharger.com +mediadvertising.ro +mediageneral.com +mediamath.com +mediamgr.ugo.com +mediaplazza.com +mediaplex.com +mediascale.de +mediatext.com +mediax.angloinfo.com +mediaz.angloinfo.com +medleyads.com +medyanetads.com +megacash.de +megago.com +megastats.com +megawerbung.de +metaffiliation.com +metanetwork.com +methodcash.com +metrics.cnn.com +metrics.windowsitpro.com +mgid.com +miarroba.com +microstatic.pl +microticker.com +midnightclicking.com +misstrends.com +mixpanel.com +mixtraffic.com +mjxads.internet.com +mlm.de +mmismm.com +mmtro.com +moatads.com +mobclix.com +mocean.mobi +moneyexpert.com +monsterpops.com +mopub.com +mouseflow.com +mpstat.us +mr-rank.de +mrskincash.com +mtree.com +musiccounter.ru +muwmedia.com +myaffiliateprogram.com +mybloglog.com +mycounter.ua +mymoneymakingapp.com +mypagerank.net +mypagerank.ru +mypowermall.com +mystat-in.net +mystat.pl +mytop-in.net +n69.com +naiadsystems.com.invalid +naj.sk +namimedia.com +nastydollars.com +navigator.io +navrcholu.cz +nbjmp.com +ndparking.com +nedstat.com +nedstat.nl +nedstatbasic.net +nedstatpro.net +nend.net +neocounter.neoworx-blog-tools.net +neoffic.com +net-filter.com +netaffiliation.com +netagent.cz +netclickstats.com +netcommunities.com +netdirect.nl +netincap.com +netpool.netbookia.net +netshelter.net +neudesicmediagroup.com +newads.bangbros.com +newbie.com +newnet.qsrch.com +newnudecash.com +newopenx.detik.com +newt1.adultadworld.com +newt1.adultworld.com +newtopsites.com +ng3.ads.warnerbros.com +ngs.impress.co.jp +nitroclicks.com +novem.pl +nuggad.net +numax.nu-1.com +nuseek.com +oas.benchmark.fr +oas.foxnews.com +oas.repubblica.it +oas.roanoke.com +oas.salon.com +oas.toronto.com +oas.uniontrib.com +oas.villagevoice.com +oascentral.businessweek.com +oascentral.chicagobusiness.com +oascentral.fortunecity.com +oascentral.register.com +oewa.at +oewabox.at +offerforge.com +offermatica.com +olivebrandresponse.com +omniture.com +onclasrv.com +onclickads.net +oneandonlynetwork.com +onenetworkdirect.com +onestat.com +onestatfree.com +online-metrix.net +onlinecash.com +onlinecashmethod.com +onlinerewardcenter.com +openad.tf1.fr +openad.travelnow.com +openads.friendfinder.com +openads.org +openx.angelsgroup.org.uk +openx.blindferret.com +opienetwork.com +optimost.com +optmd.com +ordingly.com +ota.cartrawler.com +otto-images.developershed.com +outbrain.com +overture.com +owebmoney.ru +oxado.com +oxcash.com +oxen.hillcountrytexas.com +p.adpdx.com +pagead.l.google.com +pagefair.com +pagerank-ranking.de +pagerank-submitter.de +pagerank-united.de +pagerank4you.com +pageranktop.com +pagead2.googlesyndication.com +parse.ly.invalid +parsely.com +partage-facile.com +partner-ads.com +partner.pelikan.cz +partner.topcities.com +partnerad.l.google.com +partnercash.de +partners.priceline.com +passion-4.net +pay-ads.com +paycounter.com +paypopup.com +payserve.com +pbnet.ru +pcash.imlive.com +peep-auktion.de +peer39.com +pennyweb.com +pepperjamnetwork.com +percentmobile.com +perfectaudience.com +perfiliate.com +performancerevenue.com +performancerevenues.com +performancing.com +pgmediaserve.com +pgpartner.com +pheedo.com +phoenix-adrunner.mycomputer.com +phpadsnew.new.natuurpark.nl +phpmyvisites.net +picadmedia.com +pillscash.com +pimproll.com +pixel.adsafeprotected.com +pixel.jumptap.com +pixel.redditmedia.com +play4traffic.com +playhaven.com +plista.com +plugrush.com +pointroll.com +pop-under.ru +popads.net +popub.com +popunder.ru +popup.msn.com +popupmoney.com +popupnation.com +popups.infostart.com +popuptraffic.com +porngraph.com +porntrack.com +postrelease.com +potenza.cz +pr-ten.de +praddpro.de +prchecker.info +precisioncounter.com +predictad.com +primaryads.com +primetime.net +privatecash.com +pro-advertising.com +pro.i-doctor.co.kr +proext.com +profero.com +projectwonderful.com +promo.badoink.com +promo.ulust.com +promo1.webcams.nl +promobenef.com +promos.fling.com +promote.pair.com +promotion-campaigns.com +pronetadvertising.com +propellerads.com +proranktracker.com +proton-tm.com +protraffic.com +provexia.com +prsitecheck.com +psstt.com +pub.chez.com +pub.club-internet.fr +pub.hardware.fr +pub.realmedia.fr +pubdirecte.com +publicidad.elmundo.es +pubmatic.com +pubs.lemonde.fr +pulse360.com +q.azcentral.com +qctop.com +qnsr.com +quantcast.com +quantserve.com +quarterserver.de +questaffiliates.net +quigo.com +quinst.com +quisma.com +rad.msn.com +radar.cedexis.com +radarurl.com +radiate.com +rampidads.com +rank-master.com +rank-master.de +rankchamp.de +ranking-charts.de +ranking-hits.de +ranking-id.de +ranking-links.de +ranking-liste.de +ranking-street.de +rankingchart.de +rankingscout.com +rankyou.com +rapidcounter.com +rate.ru +ratings.lycos.com +rb1.design.ru +re-directme.com +reachjunction.com +reactx.com +readserver.net +realcastmedia.com +realclix.com +realmedia-a800.d4p.net +realtechnetwork.com +realtracker.com +reduxmedia.com +reedbusiness.com.invalid +referralware.com +regnow.com +reinvigorate.net +reklam.rfsl.se +reklama.mironet.cz +reklama.reflektor.cz +reklamcsere.hu +reklame.unwired-i.net +reklamer.com.ua +relevanz10.de +relmaxtop.com +remotead.cnet.com +republika.onet.pl +retargeter.com +revenue.net +revenuedirect.com +revsci.net +revstats.com +richmails.com +richmedia.yimg.com +richwebmaster.com +rightstats.com +rlcdn.com +rle.ru +rmads.msn.com +rmedia.boston.com +roar.com +robotreplay.com +roia.biz +rok.com.com +rose.ixbt.com +rotabanner.com +roxr.net +rtbpop.com +rtbpopd.com +ru-traffic.com +ru4.com +rubiconproject.com +s.adroll.com +s2d6.com +sageanalyst.net +sail-horizon.com +samsungacr.com +samsungads.com +sbx.pagesjaunes.fr +scambiobanner.aruba.it +scanscout.com +scopelight.com +scorecardresearch.com +scratch2cash.com +scripte-monster.de +searchfeast.com +searchmarketing.com +searchramp.com +secure.webconnect.net +sedoparking.com +sedotracker.com +seeq.com.invalid +sensismediasmart.com.au +seo4india.com +serv0.com +servedby-buysellads.com +servedbyadbutler.com +servedbyopenx.com +servethis.com +services.hearstmags.com +serving-sys.com +sexaddpro.de +sexadvertentiesite.nl +sexcounter.com +sexinyourcity.com +sexlist.com +sextracker.com +sexystat.com +shareadspace.com +shareasale.com +sharepointads.com +sher.index.hu +shinystat.com +shinystat.it +shoppingads.com +siccash.com +sidebar.angelfire.com +sinoa.com +sitemeter.com +sitestat.com +sixsigmatraffic.com +skimresources.com +skylink.vn +slickaffiliate.com +slopeaota.com +smart4ads.com +smartadserver.com +smowtion.com +snapads.com +snoobi.com +socialspark.com +softclick.com.br +spacash.com +sparkstudios.com +specificmedia.co.uk +specificpop.com +spezialreporte.de +spinbox.techtracker.com +spinbox.versiontracker.com +sponsorads.de +sponsorpro.de +sponsors.thoughtsmedia.com +spot.fitness.com +spotxchange.com +spylog.com +spywarelabs.com +spywarenuker.com +spywords.com +srwww1.com +starffa.com +start.freeze.com +stat.cliche.se +stat.dealtime.com +stat.dyna.ultraweb.hu +stat.pl +stat.webmedia.pl +stat.zenon.net +stat24.com +stat24.meta.ua +statcounter.com +static.fmpub.net +static.itrack.it +staticads.btopenworld.com +statistik-gallup.net +statm.the-adult-company.com +stats.blogger.com +stats.cts-bv.nl +stats.directnic.com +stats.hyperinzerce.cz +stats.mirrorfootball.co.uk +stats.multiup.org +stats.olark.com +stats.self.com +stats.townnews.com +stats.unwired-i.net +stats.wordpress.com +stats.x14.eu +stats2.self.com +stats4all.com +statsie.com +statxpress.com +steelhouse.com +steelhousemedia.com +stickyadstv.com +suavalds.com +subscribe.hearstmags.com +sugoicounter.com +sumo.com +sumome.com +superclix.de +superstats.com +supertop.ru +supertop100.com +suptullog.com +surfmusik-adserver.de +swan-swan-goose.com +swissadsolutions.com +swordfishdc.com +sx.trhnt.com +t.insigit.com +t.pusk.ru +taboola.com +tacoda.net +tagular.com +tailsweep.co.uk +tailsweep.com +tailsweep.se +takru.com +tangerinenet.biz +tapad.com +targad.de +targetingnow.com +targetnet.com +targetpoint.com +tatsumi-sys.jp +tcads.net +tpc.googlesyndication.com +teads.tv +techclicks.net +teenrevenue.com +teliad.de +text-link-ads.com +textad.sexsearch.com +textads.biz +textads.opera.com +textlinks.com +tfag.de +theadhost.com +theads.me +thebugs.ws +thecounter.com +therapistla.com +therichkids.com +thrnt.com +thruport.com +tinybar.com +tizers.net +tlvmedia.com +tntclix.co.uk +top-casting-termine.de +top-site-list.com +top.list.ru +top.mail.ru +top.proext.com +top100-images.rambler.ru +top100.mafia.ru +top123.ro +top20.com.invalid +top20free.com +top90.ro +topbarh.box.sk +topbucks.com +topforall.com +topgamesites.net +toplist.cz +toplist.pornhost.com +toplista.mw.hu +toplistcity.com +topmmorpgsites.com.invalid +topping.com.ua +toprebates.com +topsafelist.net +topsearcher.com +topsir.com +topsite.lv +topsites.com.br +topstats.com +totemcash.com +touchclarity.com +touchclarity.natwest.com +tour.brazzers.com +tpnads.com +track.adform.net +track.anchorfree.com +track.gawker.com +trackalyzer.com +tracker.icerocket.com +tracker.marinsm.com +tracking.crunchiemedia.com +tracking.gajmp.com +tracking.internetstores.de +tracking.yourfilehost.com +tracking101.com +trackingsoft.com +trackmysales.com +tradeadexchange.com +tradedoubler.com +traffic-exchange.com +traffic.liveuniversenetwork.com +trafficadept.com +trafficbalancerouting.com +trafficcdn.liveuniversenetwork.com +trafficfactory.biz +trafficholder.com +traffichunt.com +trafficjunky.net +trafficleader.com +trafficsecrets.com +trafficspaces.net +trafficstrategies.com +trafficswarm.com +traffictrader.net +trafficz.com +trafficz.net +traffiq.com +trafic.ro +travis.bosscasinos.com +trekblue.com +trekdata.com +trendcounter.com +trendmd.com +trhunt.com +tribalfusion.com +trix.net +truehits.net +truehits1.gits.net.th +truehits2.gits.net.th +tsms-ad.tsms.com +tubemogul.com +turn.com +tvmtracker.com +twittad.com +tyroo.com +uarating.com +ukbanners.com +ultramercial.com +unanimis.co.uk +untd.com +updated.com +urlcash.net +us.a1.yimg.com +usapromotravel.com +usmsad.tom.com +utarget.co.uk +utils.mediageneral.net +v1.cnzz.com +validclick.com +valuead.com +valueclick.com +valueclickmedia.com +valuecommerce.com +valuesponsor.com +veille-referencement.com +ventivmedia.com +vericlick.com +vertadnet.com +veruta.com +vervewireless.com +vibrantmedia.com +video-stats.video.google.com +videoegg.com +view4cash.de +viewpoint.com +visistat.com +visit.webhosting.yahoo.com +visitbox.de +visual-pagerank.fr +visualrevenue.com +voicefive.com +vpon.com +vrs.cz +vs.tucows.com +vungle.com +warlog.ru +wdads.sx.atl.publicus.com +web-stat.com +web.informer.com +web2.deja.com +webads.co.nz +webads.nl +webangel.ru +webcash.nl +webcounter.cz +webcounter.goweb.de +webgains.com +webmaster-partnerprogramme24.de +webmasterplan.com +webmasterplan.de +weborama.fr +webpower.com +webreseau.com +webseoanalytics.com +websponsors.com +webstat.channel4.com +webstat.com +webstat.net +webstats4u.com +webtrackerplus.com +webtraffic.se +webtraxx.de +webtrendslive.com +werbung.meteoxpress.com +wetrack.it +whaleads.com +whenu.com +whispa.com +whoisonline.net +wholesaletraffic.info +widespace.com +widgetbucks.com +wikia-ads.wikia.com +window.nixnet.cz +wintricksbanner.googlepages.com +witch-counter.de +wlmarketing.com +wmirk.ru +wonderlandads.com +wondoads.de +woopra.com +worldwide-cash.net +wtlive.com +www-banner.chat.ru +www-google-analytics.l.google.com +www.banner-link.com.br +www.dnps.com +www.kaplanindex.com +www.money4exit.de +www.photo-ads.co.uk +www1.gto-media.com +www8.glam.com +wwwpromoter.com +x-traceur.com +x6.yakiuchi.com +xchange.ro +xclicks.net +xertive.com +xg4ken.com +xiti.com +xplusone.com +xponsor.com +xq1.net +xrea.com +xtendmedia.com +xtremetop100.com +xxxcounter.com +xxxmyself.com +y.ibsys.com +yab-adimages.s3.amazonaws.com +yabuka.com +yadro.ru +yesads.com +yesadvertising.com +yieldads.com +yieldlab.net +yieldmanager.com +yieldmanager.net +yieldmo.com +yieldtraffic.com +yoc.mobi +yoggrt.com +z5x.net +zangocash.com +zanox-affiliate.de +zanox.com +zantracker.com +zedo.com +zencudo.co.uk +zenkreka.com +zenzuu.com +zeus.developershed.com +zeusclicks.com +zintext.com +zmedia.com +zv1.november-lax.com \ No newline at end of file diff --git a/app/src/web/assets/css/components/round_icons.css b/app/src/web/assets/css/components/round_icons.css new file mode 100644 index 00000000..c765d2ab --- /dev/null +++ b/app/src/web/assets/css/components/round_icons.css @@ -0,0 +1,4 @@ +#threadlist_rows, [role*=presentation] img._1e_c, +i.img.profpic:not(._1_0m), ._42b6._42b6._42b6, ._5i9c.img, img._2cu2, i.img.l, [id*=threadlist] i.img:not(._1_0m) { + border-radius: 50% !important; +} diff --git a/app/src/web/assets/css/components/round_icons.scss b/app/src/web/assets/css/components/round_icons.scss new file mode 100644 index 00000000..c00fe1bf --- /dev/null +++ b/app/src/web/assets/css/components/round_icons.scss @@ -0,0 +1,4 @@ +#threadlist_rows, [role*=presentation] img._1e_c, +i.img.profpic:not(._1_0m), ._42b6._42b6._42b6, ._5i9c.img, img._2cu2, i.img.l, [id*=threadlist] i.img:not(._1_0m) { + border-radius: 50% !important; +} diff --git a/app/src/web/assets/css/core/_base.scss b/app/src/web/assets/css/core/_base.scss new file mode 100644 index 00000000..472319fe --- /dev/null +++ b/app/src/web/assets/css/core/_base.scss @@ -0,0 +1,107 @@ +@mixin placeholder { + ::-webkit-input-placeholder { + @content; + } + + :-moz-placeholder { + @content; + } + + ::-moz-placeholder { + @content; + } + + :-ms-input-placeholder { + @content; + } +} + +@mixin keyframes($name) { + @-webkit-keyframes #{$name} { + @content; + } + + @-moz-keyframes #{$name} { + @content; + } + + //@-ms-keyframes #{$name} { + // @content; + //} + + @keyframes #{$name} { + @content; + } +} + +// Helper function to replace characters in a string +@function str-replace($string, $search, $replace: "") { + $index: str-index($string, $search); + + @return if($index, str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace), $string); +} + +// https://css-tricks.com/probably-dont-base64-svg/ +// SVG optimization thanks to https://codepen.io/jakob-e/pen/doMoML +// Function to create an optimized svg url +// Version: 1.0.6 +@function svg-url($svg) { + // + // Add missing namespace + // + @if not str-index($svg, xmlns) { + $svg: str-replace($svg, "", "%3E"); + + // + // The maybe list + // + // Keep size and compile time down + // ... only add on documented fail + // + // $chunk: str-replace($chunk, '&', '%26'); + // $chunk: str-replace($chunk, '|', '%7C'); + // $chunk: str-replace($chunk, '[', '%5B'); + // $chunk: str-replace($chunk, ']', '%5D'); + // $chunk: str-replace($chunk, '^', '%5E'); + // $chunk: str-replace($chunk, '`', '%60'); + // $chunk: str-replace($chunk, ';', '%3B'); + // $chunk: str-replace($chunk, '?', '%3F'); + // $chunk: str-replace($chunk, ':', '%3A'); + // $chunk: str-replace($chunk, '@', '%40'); + // $chunk: str-replace($chunk, '=', '%3D'); + + $encoded: #{$encoded}#{$chunk}; + $index: $index + $slice; + } + + @return url("data:image/svg+xml,#{$encoded}"); +} + +// Background svg mixin +@mixin background-svg($svg, $extra: "no-repeat") { + background: svg-url($svg) unquote($extra) !important; +} diff --git a/app/src/web/assets/css/core/_colors.scss b/app/src/web/assets/css/core/_colors.scss new file mode 100644 index 00000000..1411a857 --- /dev/null +++ b/app/src/web/assets/css/core/_colors.scss @@ -0,0 +1,18 @@ +$bg_transparent: rgba(#f0f, 0.02) !default; + +//Keep above as first line so partials aren't compiled +//Our default colors are test colors; production files should always import the actual colors + +$text: #d7b0d7 !default; +// must be visible with accent as the background +$accent_text: #76d7c2 !default; +$link: #9266d5 !default; +$accent: #3b5998 !default; +$background: #451515 !default; +// background2 must be transparent +$background2: rgba(lighten($background, 35%), 0.35) !default; //Also change ratio in material_light +$bg_opaque: rgba($background, 1.0) !default; +$bg_opaque2: rgba($background2, 1.0) !default; +$card: #239645 !default; +$tint: #ff4682 !default; // must be different from $background +$divider: rgba($text, 0.3) !default; diff --git a/app/src/web/assets/css/core/_core_bg.scss b/app/src/web/assets/css/core/_core_bg.scss new file mode 100644 index 00000000..21c20bcc --- /dev/null +++ b/app/src/web/assets/css/core/_core_bg.scss @@ -0,0 +1,86 @@ +#viewport { + background: $background !important; +} + +body, :root, #root, #header, #MComposer, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: $bg_transparent !important; +} + +//card related +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: $card !important; +} + +// unread related + +.aclb { + background: $tint !important; +} + +//contains images so must have background-color +._cv_, ._2sq8 { + background-color: $bg_transparent !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: $bg_opaque !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: $bg_opaque2 !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: $background2 !important; +} + +.mQuestionsPollResultsBar .shaded { + background: $accent !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: $divider !important; +} + +//fab +button ._v89 ._54k8._1fl1 { + background: $accent !important; +} \ No newline at end of file diff --git a/app/src/web/assets/css/core/_core_border.scss b/app/src/web/assets/css/core/_core_border.scss new file mode 100644 index 00000000..c366bc14 --- /dev/null +++ b/app/src/web/assets/css/core/_core_border.scss @@ -0,0 +1,94 @@ +//border between like and comment +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid $divider !important; +} + +._4_d1, ._5cni { + border-right: 1px solid $divider !important; +} + +//above see more +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid $divider !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid $divider !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid $divider !important; + border-bottom: 1px solid $divider !important; +} + +//friend card border +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid $divider !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid $text !important; +} + +._3gka { + border: 1px dashed $divider !important; +} + +//link card bottom border +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: $divider !important; +} + +// like, comment, share divider +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +//page side tab layout +._2cis { + border-left: 10px solid $bg_transparent !important; + border-right: 10px solid $bg_transparent !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid $text !important; +} + +._1ss6 { + border-left: 2px solid $text !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid $text !important; +} \ No newline at end of file diff --git a/app/src/web/assets/css/core/_core_messenger.scss b/app/src/web/assets/css/core/_core_messenger.scss new file mode 100644 index 00000000..608fc23d --- /dev/null +++ b/app/src/web/assets/css/core/_core_messenger.scss @@ -0,0 +1,20 @@ +// Not all messenger related components are here; only the main ones. +// Borders for instance are merged into core_border + +// Other person's message bubble +._34ee { + background: $background2 !important; + color: $text !important; + +} + +// Your message bubble; order matters +._34em ._34ee { + background: $accent !important; + color: $accent_text !important; +} + +// Sticker page +._5as0, ._5cni, ._5as2 { + background: $bg_opaque !important; +} \ No newline at end of file diff --git a/app/src/web/assets/css/core/_core_text.scss b/app/src/web/assets/css/core/_core_text.scss new file mode 100644 index 00000000..154cee84 --- /dev/null +++ b/app/src/web/assets/css/core/_core_text.scss @@ -0,0 +1,39 @@ +[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: $text !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: $accent !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +// most links do not have a special color. We will highlight those in posts and messages +p > a, .msg span > a { + color: $link !important; +} \ No newline at end of file diff --git a/app/src/web/assets/css/core/_main.scss b/app/src/web/assets/css/core/_main.scss new file mode 100644 index 00000000..3e972f93 --- /dev/null +++ b/app/src/web/assets/css/core/_main.scss @@ -0,0 +1,6 @@ +@import "core"; +@import "svg"; + +//this file is used as the base for all themes +//given that svgs take a lot of characters, we won't compile them when testing +//therefore we use the core scss diff --git a/app/src/web/assets/css/core/_svg.scss b/app/src/web/assets/css/core/_svg.scss new file mode 100644 index 00000000..8c714438 --- /dev/null +++ b/app/src/web/assets/css/core/_svg.scss @@ -0,0 +1,74 @@ +// icons courtesy of https://material.io/icons/ + +$camera: ''; + +// status upload image +._50uu { + @include background-svg($camera); +} + +$video: ''; + +// status upload video +._50uw { + @include background-svg($video); +} + +$like: ''; +$like_selected: ''; + +// 2018/12/29 +// Previously ._15km ._15ko::before and ._15km ._15ko._77la::before; however, reaction changes no longer affect this element +// The robust measure seems to be the parent of a[data-sigil~="like-reaction-flyout"] along with [data-sigil~="like"] for an unliked post +// and [data-sigil~="unlike"] for a liked post +._15km ._15ko::before { + @include background-svg($like); + background-position: center !important; +} + +._15km ._15ko._77la::before { + @include background-svg($like_selected); + background-position: center !important; +} + +$comment: ''; + +._15km ._15kq::before { + @include background-svg($comment); + background-position: center !important; +} + +$share: ''; + +._15km ._15kr::before { + @include background-svg($share); + background-position: center !important; +} + +$more_horiz: ''; + +//$menus: ".sp_89zNula0Qh5", +//".sp_MP2OtCXORz9", +//".sp_NIWBacTn8LF", +//// 2018/12/31 +//".sp_9ZFVhnFyWsw", +//// 2019/01/03 +//".sp_SJIJjSlGEIO"; +// +//$menu_collector: (); +// +//@each $menu in $menus { +// $menu_collector: append($menu_collector, unquote('#{$menu}'), 'comma'); +// $menu_collector: append($menu_collector, unquote('#{$menu}_2x'), 'comma'); +// $menu_collector: append($menu_collector, unquote('#{$menu}_3x'), 'comma'); +//} +// +//#{$menu_collector} { +// @include background-svg($more_horiz); +// background-position: center !important; +//} + +.story_body_container i.img[data-sigil*="story-popup-context"] { + @include background-svg($more_horiz); + background-position: center !important; +} \ No newline at end of file diff --git a/app/src/web/assets/css/core/core.css b/app/src/web/assets/css/core/core.css new file mode 100644 index 00000000..1d48fa35 --- /dev/null +++ b/app/src/web/assets/css/core/core.css @@ -0,0 +1,306 @@ +[style*=color], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: #d7b0d7 !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: #3b5998 !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +p > a, .msg span > a { + color: #9266d5 !important; +} + +#viewport { + background: #451515 !important; +} + +body, :root, #root, #header, #MComposer, [style*=background-color], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: rgba(255, 0, 255, 0.02) !important; +} + +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: #239645 !important; +} + +.aclb { + background: #ff4682 !important; +} + +._cv_, ._2sq8 { + background-color: rgba(255, 0, 255, 0.02) !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: #451515 !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: #c74646 !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: rgba(199, 70, 70, 0.35) !important; +} + +.mQuestionsPollResultsBar .shaded { + background: #3b5998 !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: rgba(215, 176, 215, 0.3) !important; +} + +button ._v89 ._54k8._1fl1 { + background: #3b5998 !important; +} + +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid rgba(215, 176, 215, 0.3) !important; +} + +._4_d1, ._5cni { + border-right: 1px solid rgba(215, 176, 215, 0.3) !important; +} + +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid rgba(215, 176, 215, 0.3) !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid rgba(215, 176, 215, 0.3) !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid rgba(215, 176, 215, 0.3) !important; + border-bottom: 1px solid rgba(215, 176, 215, 0.3) !important; +} + +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid rgba(215, 176, 215, 0.3) !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid #d7b0d7 !important; +} + +._3gka { + border: 1px dashed rgba(215, 176, 215, 0.3) !important; +} + +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: rgba(215, 176, 215, 0.3) !important; +} + +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +._2cis { + border-left: 10px solid rgba(255, 0, 255, 0.02) !important; + border-right: 10px solid rgba(255, 0, 255, 0.02) !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid #d7b0d7 !important; +} + +._1ss6 { + border-left: 2px solid #d7b0d7 !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid #d7b0d7 !important; +} + +._34ee { + background: rgba(199, 70, 70, 0.35) !important; + color: #d7b0d7 !important; +} + +._34em ._34ee { + background: #3b5998 !important; + color: #76d7c2 !important; +} + +._5as0, ._5cni, ._5as2 { + background: #451515 !important; +} + +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +::-webkit-input-placeholder { + color: #d7b0d7 !important; +} + +:-moz-placeholder { + color: #d7b0d7 !important; +} + +::-moz-placeholder { + color: #d7b0d7 !important; +} + +:-ms-input-placeholder { + color: #d7b0d7 !important; +} + +.excessItem { + outline: rgba(215, 176, 215, 0.3) !important; +} + +._3m1m { + background: linear-gradient(transparent, #451515) !important; +} + +@-webkit-keyframes highlightFade { + 0%, 50% { + background: rgba(199, 70, 70, 0.35); + } + 100% { + background: rgba(255, 0, 255, 0.02); + } +} +@-moz-keyframes highlightFade { + 0%, 50% { + background: rgba(199, 70, 70, 0.35); + } + 100% { + background: rgba(255, 0, 255, 0.02); + } +} +@keyframes highlightFade { + 0%, 50% { + background: rgba(199, 70, 70, 0.35); + } + 100% { + background: rgba(255, 0, 255, 0.02); + } +} +@-webkit-keyframes chatHighlightAnimation { + 0%, 100% { + background: rgba(255, 0, 255, 0.02); + } + 50% { + background: rgba(199, 70, 70, 0.35); + } +} +@-moz-keyframes chatHighlightAnimation { + 0%, 100% { + background: rgba(255, 0, 255, 0.02); + } + 50% { + background: rgba(199, 70, 70, 0.35); + } +} +@keyframes chatHighlightAnimation { + 0%, 100% { + background: rgba(255, 0, 255, 0.02); + } + 50% { + background: rgba(199, 70, 70, 0.35); + } +} diff --git a/app/src/web/assets/css/core/core.scss b/app/src/web/assets/css/core/core.scss new file mode 100644 index 00000000..38086529 --- /dev/null +++ b/app/src/web/assets/css/core/core.scss @@ -0,0 +1,54 @@ +@import "colors"; +@import "base"; +@import "core_text"; +@import "core_bg"; +@import "core_border"; +@import "core_messenger"; + +//GLOBAL overrides; use with caution +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +// .touch .btnS, button, ._94v, ._590n { +// box-shadow: none !important; +// } + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +@include placeholder { + color: $text !important; +} + +.excessItem { + outline: $divider !important; +} + +._3m1m { + background: linear-gradient(transparent, $bg_opaque) !important; +} + +//new comment +@include keyframes(highlightFade) { + 0%, 50% { + background: $background2; + } + + 100% { + background: $bg_transparent; + } +} + +@include keyframes(chatHighlightAnimation) { + 0%, 100% { + background: $bg_transparent; + } + + 50% { + background: $background2; + } +} diff --git a/app/src/web/assets/css/themes/.gitignore b/app/src/web/assets/css/themes/.gitignore new file mode 100644 index 00000000..01d06441 --- /dev/null +++ b/app/src/web/assets/css/themes/.gitignore @@ -0,0 +1,2 @@ +test.scss +test.css \ No newline at end of file diff --git a/app/src/web/assets/css/themes/custom.css b/app/src/web/assets/css/themes/custom.css new file mode 100644 index 00000000..e38c6de0 --- /dev/null +++ b/app/src/web/assets/css/themes/custom.css @@ -0,0 +1,338 @@ +[style*=color], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: $T$ !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: $A$ !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +p > a, .msg span > a { + color: $TT$ !important; +} + +#viewport { + background: $B$ !important; +} + +body, :root, #root, #header, #MComposer, [style*=background-color], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: $BT$ !important; +} + +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: $C$ !important; +} + +.aclb { + background: $TI$ !important; +} + +._cv_, ._2sq8 { + background-color: $BT$ !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: $O$ !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: $OO$ !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: $BBT$ !important; +} + +.mQuestionsPollResultsBar .shaded { + background: $A$ !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: $D$ !important; +} + +button ._v89 ._54k8._1fl1 { + background: $A$ !important; +} + +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid $D$ !important; +} + +._4_d1, ._5cni { + border-right: 1px solid $D$ !important; +} + +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid $D$ !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid $D$ !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid $D$ !important; + border-bottom: 1px solid $D$ !important; +} + +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid $D$ !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid $T$ !important; +} + +._3gka { + border: 1px dashed $D$ !important; +} + +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: $D$ !important; +} + +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +._2cis { + border-left: 10px solid $BT$ !important; + border-right: 10px solid $BT$ !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid $T$ !important; +} + +._1ss6 { + border-left: 2px solid $T$ !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid $T$ !important; +} + +._34ee { + background: $BBT$ !important; + color: $T$ !important; +} + +._34em ._34ee { + background: $A$ !important; + color: $AT$ !important; +} + +._5as0, ._5cni, ._5as2 { + background: $O$ !important; +} + +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +::-webkit-input-placeholder { + color: $T$ !important; +} + +:-moz-placeholder { + color: $T$ !important; +} + +::-moz-placeholder { + color: $T$ !important; +} + +:-ms-input-placeholder { + color: $T$ !important; +} + +.excessItem { + outline: $D$ !important; +} + +._3m1m { + background: linear-gradient(transparent, $O$) !important; +} + +@-webkit-keyframes highlightFade { + 0%, 50% { + background: $BBT$; + } + 100% { + background: $BT$; + } +} +@-moz-keyframes highlightFade { + 0%, 50% { + background: $BBT$; + } + 100% { + background: $BT$; + } +} +@keyframes highlightFade { + 0%, 50% { + background: $BBT$; + } + 100% { + background: $BT$; + } +} +@-webkit-keyframes chatHighlightAnimation { + 0%, 100% { + background: $BT$; + } + 50% { + background: $BBT$; + } +} +@-moz-keyframes chatHighlightAnimation { + 0%, 100% { + background: $BT$; + } + 50% { + background: $BBT$; + } +} +@keyframes chatHighlightAnimation { + 0%, 100% { + background: $BT$; + } + 50% { + background: $BBT$; + } +} +._50uu { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="$T$" viewBox="0 -10 50 50"%3E%3Ccircle cx="25" cy="23" r="3.2"/%3E%3Cpath d="M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/%3E%3Cpath fill="none" d="M13 11h24v24H13z"/%3E%3C/svg%3E') no-repeat !important; +} + +._50uw { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="$T$" viewBox="0 0 50 50"%3E%3Cpath fill="none" d="M13 26h24v24H13z"/%3E%3Cpath d="M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"/%3E%3C/svg%3E') no-repeat !important; +} + +._15km ._15ko::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="$T$" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15ko._77la::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="$A$" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kq::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="$T$" viewBox="0 0 24 24"%3E%3Cpath d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18z"/%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kr::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="$T$" viewBox="0 0 24 24"%3E%3Cpath d="M14 9V5l7 7-7 7v-4.1c-5 0-8.5 1.6-11 5.1 1-5 4-10 11-11z"/%3E%3Cpath fill="none" d="M24 0H0v24h24z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +.story_body_container i.img[data-sigil*=story-popup-context] { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath fill="$T$" d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} diff --git a/app/src/web/assets/css/themes/custom.scss b/app/src/web/assets/css/themes/custom.scss new file mode 100644 index 00000000..50c029fb --- /dev/null +++ b/app/src/web/assets/css/themes/custom.scss @@ -0,0 +1,14 @@ +$bg_transparent: unquote('$BT$'); +$text: unquote('$T$'); +$link: unquote('$TT$'); +$accent: unquote('$A$'); +$accent_text: unquote('$AT$'); +$background: unquote('$B$'); +$background2: unquote('$BBT$'); +$bg_opaque: unquote('$O$'); +$bg_opaque2: unquote('$OO$'); +$divider: unquote('$D$'); +$card: unquote('$C$'); +$tint: unquote('$TI$'); + +@import "../core/main"; diff --git a/app/src/web/assets/css/themes/material_amoled.css b/app/src/web/assets/css/themes/material_amoled.css new file mode 100644 index 00000000..c821003e --- /dev/null +++ b/app/src/web/assets/css/themes/material_amoled.css @@ -0,0 +1,338 @@ +[style*=color], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: #fff !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: #5d86dd !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +p > a, .msg span > a { + color: #5d86dd !important; +} + +#viewport { + background: #000 !important; +} + +body, :root, #root, #header, #MComposer, [style*=background-color], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: #000 !important; +} + +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: rgba(0, 0, 0, 0.35) !important; +} + +.aclb { + background: rgba(255, 255, 255, 0.2) !important; +} + +._cv_, ._2sq8 { + background-color: #000 !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: black !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: black !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: rgba(0, 0, 0, 0.35) !important; +} + +.mQuestionsPollResultsBar .shaded { + background: #5d86dd !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: rgba(255, 255, 255, 0.3) !important; +} + +button ._v89 ._54k8._1fl1 { + background: #5d86dd !important; +} + +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._4_d1, ._5cni { + border-right: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid rgba(255, 255, 255, 0.3) !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid #fff !important; +} + +._3gka { + border: 1px dashed rgba(255, 255, 255, 0.3) !important; +} + +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: rgba(255, 255, 255, 0.3) !important; +} + +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +._2cis { + border-left: 10px solid #000 !important; + border-right: 10px solid #000 !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid #fff !important; +} + +._1ss6 { + border-left: 2px solid #fff !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid #fff !important; +} + +._34ee { + background: rgba(0, 0, 0, 0.35) !important; + color: #fff !important; +} + +._34em ._34ee { + background: #5d86dd !important; + color: #fff !important; +} + +._5as0, ._5cni, ._5as2 { + background: black !important; +} + +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +::-webkit-input-placeholder { + color: #fff !important; +} + +:-moz-placeholder { + color: #fff !important; +} + +::-moz-placeholder { + color: #fff !important; +} + +:-ms-input-placeholder { + color: #fff !important; +} + +.excessItem { + outline: rgba(255, 255, 255, 0.3) !important; +} + +._3m1m { + background: linear-gradient(transparent, black) !important; +} + +@-webkit-keyframes highlightFade { + 0%, 50% { + background: rgba(0, 0, 0, 0.35); + } + 100% { + background: #000; + } +} +@-moz-keyframes highlightFade { + 0%, 50% { + background: rgba(0, 0, 0, 0.35); + } + 100% { + background: #000; + } +} +@keyframes highlightFade { + 0%, 50% { + background: rgba(0, 0, 0, 0.35); + } + 100% { + background: #000; + } +} +@-webkit-keyframes chatHighlightAnimation { + 0%, 100% { + background: #000; + } + 50% { + background: rgba(0, 0, 0, 0.35); + } +} +@-moz-keyframes chatHighlightAnimation { + 0%, 100% { + background: #000; + } + 50% { + background: rgba(0, 0, 0, 0.35); + } +} +@keyframes chatHighlightAnimation { + 0%, 100% { + background: #000; + } + 50% { + background: rgba(0, 0, 0, 0.35); + } +} +._50uu { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 -10 50 50"%3E%3Ccircle cx="25" cy="23" r="3.2"/%3E%3Cpath d="M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/%3E%3Cpath fill="none" d="M13 11h24v24H13z"/%3E%3C/svg%3E') no-repeat !important; +} + +._50uw { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 50 50"%3E%3Cpath fill="none" d="M13 26h24v24H13z"/%3E%3Cpath d="M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"/%3E%3C/svg%3E') no-repeat !important; +} + +._15km ._15ko::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15ko._77la::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%235d86dd" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kq::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18z"/%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kr::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath d="M14 9V5l7 7-7 7v-4.1c-5 0-8.5 1.6-11 5.1 1-5 4-10 11-11z"/%3E%3Cpath fill="none" d="M24 0H0v24h24z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +.story_body_container i.img[data-sigil*=story-popup-context] { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath fill="%23fff" d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} diff --git a/app/src/web/assets/css/themes/material_amoled.scss b/app/src/web/assets/css/themes/material_amoled.scss new file mode 100644 index 00000000..19190126 --- /dev/null +++ b/app/src/web/assets/css/themes/material_amoled.scss @@ -0,0 +1,11 @@ +$text: #fff; +$accent_text: #fff; +$link: #5d86dd; +$accent: #5d86dd; +$background: #000; +$background2: rgba($background, 0.35); +$bg_transparent: $background; +$card: $background2; +$tint: rgba(#fff, 0.2); + +@import "../core/main"; diff --git a/app/src/web/assets/css/themes/material_dark.css b/app/src/web/assets/css/themes/material_dark.css new file mode 100644 index 00000000..0dc739eb --- /dev/null +++ b/app/src/web/assets/css/themes/material_dark.css @@ -0,0 +1,338 @@ +[style*=color], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: #fff !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: #5d86dd !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +p > a, .msg span > a { + color: #5d86dd !important; +} + +#viewport { + background: #303030 !important; +} + +body, :root, #root, #header, #MComposer, [style*=background-color], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: #303030 !important; +} + +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: #353535 !important; +} + +.aclb { + background: rgba(255, 255, 255, 0.2) !important; +} + +._cv_, ._2sq8 { + background-color: #303030 !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: #303030 !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: #898989 !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: rgba(137, 137, 137, 0.35) !important; +} + +.mQuestionsPollResultsBar .shaded { + background: #5d86dd !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: rgba(255, 255, 255, 0.3) !important; +} + +button ._v89 ._54k8._1fl1 { + background: #5d86dd !important; +} + +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._4_d1, ._5cni { + border-right: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid rgba(255, 255, 255, 0.3) !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid #fff !important; +} + +._3gka { + border: 1px dashed rgba(255, 255, 255, 0.3) !important; +} + +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: rgba(255, 255, 255, 0.3) !important; +} + +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +._2cis { + border-left: 10px solid #303030 !important; + border-right: 10px solid #303030 !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid #fff !important; +} + +._1ss6 { + border-left: 2px solid #fff !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid #fff !important; +} + +._34ee { + background: rgba(137, 137, 137, 0.35) !important; + color: #fff !important; +} + +._34em ._34ee { + background: #5d86dd !important; + color: #fff !important; +} + +._5as0, ._5cni, ._5as2 { + background: #303030 !important; +} + +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +::-webkit-input-placeholder { + color: #fff !important; +} + +:-moz-placeholder { + color: #fff !important; +} + +::-moz-placeholder { + color: #fff !important; +} + +:-ms-input-placeholder { + color: #fff !important; +} + +.excessItem { + outline: rgba(255, 255, 255, 0.3) !important; +} + +._3m1m { + background: linear-gradient(transparent, #303030) !important; +} + +@-webkit-keyframes highlightFade { + 0%, 50% { + background: rgba(137, 137, 137, 0.35); + } + 100% { + background: #303030; + } +} +@-moz-keyframes highlightFade { + 0%, 50% { + background: rgba(137, 137, 137, 0.35); + } + 100% { + background: #303030; + } +} +@keyframes highlightFade { + 0%, 50% { + background: rgba(137, 137, 137, 0.35); + } + 100% { + background: #303030; + } +} +@-webkit-keyframes chatHighlightAnimation { + 0%, 100% { + background: #303030; + } + 50% { + background: rgba(137, 137, 137, 0.35); + } +} +@-moz-keyframes chatHighlightAnimation { + 0%, 100% { + background: #303030; + } + 50% { + background: rgba(137, 137, 137, 0.35); + } +} +@keyframes chatHighlightAnimation { + 0%, 100% { + background: #303030; + } + 50% { + background: rgba(137, 137, 137, 0.35); + } +} +._50uu { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 -10 50 50"%3E%3Ccircle cx="25" cy="23" r="3.2"/%3E%3Cpath d="M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/%3E%3Cpath fill="none" d="M13 11h24v24H13z"/%3E%3C/svg%3E') no-repeat !important; +} + +._50uw { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 50 50"%3E%3Cpath fill="none" d="M13 26h24v24H13z"/%3E%3Cpath d="M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"/%3E%3C/svg%3E') no-repeat !important; +} + +._15km ._15ko::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15ko._77la::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%235d86dd" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kq::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18z"/%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kr::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath d="M14 9V5l7 7-7 7v-4.1c-5 0-8.5 1.6-11 5.1 1-5 4-10 11-11z"/%3E%3Cpath fill="none" d="M24 0H0v24h24z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +.story_body_container i.img[data-sigil*=story-popup-context] { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath fill="%23fff" d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} diff --git a/app/src/web/assets/css/themes/material_dark.scss b/app/src/web/assets/css/themes/material_dark.scss new file mode 100644 index 00000000..18b8b461 --- /dev/null +++ b/app/src/web/assets/css/themes/material_dark.scss @@ -0,0 +1,10 @@ +$text: #fff; +$accent_text: #fff; +$link: #5d86dd; +$accent: #5d86dd; +$background: #303030; +$bg_transparent: $background; +$card: #353535; +$tint: rgba(#fff, 0.2); + +@import "../core/main"; diff --git a/app/src/web/assets/css/themes/material_glass.css b/app/src/web/assets/css/themes/material_glass.css new file mode 100644 index 00000000..3bf9530f --- /dev/null +++ b/app/src/web/assets/css/themes/material_glass.css @@ -0,0 +1,338 @@ +[style*=color], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: #fff !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: #5d86dd !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +p > a, .msg span > a { + color: #5d86dd !important; +} + +#viewport { + background: rgba(0, 0, 0, 0.1) !important; +} + +body, :root, #root, #header, #MComposer, [style*=background-color], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: transparent !important; +} + +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: rgba(0, 0, 0, 0.25) !important; +} + +.aclb { + background: rgba(255, 255, 255, 0.15) !important; +} + +._cv_, ._2sq8 { + background-color: transparent !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: black !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: #595959 !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: rgba(89, 89, 89, 0.35) !important; +} + +.mQuestionsPollResultsBar .shaded { + background: #5d86dd !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: rgba(255, 255, 255, 0.3) !important; +} + +button ._v89 ._54k8._1fl1 { + background: #5d86dd !important; +} + +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._4_d1, ._5cni { + border-right: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid rgba(255, 255, 255, 0.3) !important; + border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid rgba(255, 255, 255, 0.3) !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid #fff !important; +} + +._3gka { + border: 1px dashed rgba(255, 255, 255, 0.3) !important; +} + +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: rgba(255, 255, 255, 0.3) !important; +} + +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +._2cis { + border-left: 10px solid transparent !important; + border-right: 10px solid transparent !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid #fff !important; +} + +._1ss6 { + border-left: 2px solid #fff !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid #fff !important; +} + +._34ee { + background: rgba(89, 89, 89, 0.35) !important; + color: #fff !important; +} + +._34em ._34ee { + background: #5d86dd !important; + color: #fff !important; +} + +._5as0, ._5cni, ._5as2 { + background: black !important; +} + +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +::-webkit-input-placeholder { + color: #fff !important; +} + +:-moz-placeholder { + color: #fff !important; +} + +::-moz-placeholder { + color: #fff !important; +} + +:-ms-input-placeholder { + color: #fff !important; +} + +.excessItem { + outline: rgba(255, 255, 255, 0.3) !important; +} + +._3m1m { + background: linear-gradient(transparent, black) !important; +} + +@-webkit-keyframes highlightFade { + 0%, 50% { + background: rgba(89, 89, 89, 0.35); + } + 100% { + background: transparent; + } +} +@-moz-keyframes highlightFade { + 0%, 50% { + background: rgba(89, 89, 89, 0.35); + } + 100% { + background: transparent; + } +} +@keyframes highlightFade { + 0%, 50% { + background: rgba(89, 89, 89, 0.35); + } + 100% { + background: transparent; + } +} +@-webkit-keyframes chatHighlightAnimation { + 0%, 100% { + background: transparent; + } + 50% { + background: rgba(89, 89, 89, 0.35); + } +} +@-moz-keyframes chatHighlightAnimation { + 0%, 100% { + background: transparent; + } + 50% { + background: rgba(89, 89, 89, 0.35); + } +} +@keyframes chatHighlightAnimation { + 0%, 100% { + background: transparent; + } + 50% { + background: rgba(89, 89, 89, 0.35); + } +} +._50uu { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 -10 50 50"%3E%3Ccircle cx="25" cy="23" r="3.2"/%3E%3Cpath d="M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/%3E%3Cpath fill="none" d="M13 11h24v24H13z"/%3E%3C/svg%3E') no-repeat !important; +} + +._50uw { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 50 50"%3E%3Cpath fill="none" d="M13 26h24v24H13z"/%3E%3Cpath d="M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"/%3E%3C/svg%3E') no-repeat !important; +} + +._15km ._15ko::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15ko._77la::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%235d86dd" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kq::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18z"/%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kr::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23fff" viewBox="0 0 24 24"%3E%3Cpath d="M14 9V5l7 7-7 7v-4.1c-5 0-8.5 1.6-11 5.1 1-5 4-10 11-11z"/%3E%3Cpath fill="none" d="M24 0H0v24h24z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +.story_body_container i.img[data-sigil*=story-popup-context] { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath fill="%23fff" d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} diff --git a/app/src/web/assets/css/themes/material_glass.scss b/app/src/web/assets/css/themes/material_glass.scss new file mode 100644 index 00000000..0c61a38c --- /dev/null +++ b/app/src/web/assets/css/themes/material_glass.scss @@ -0,0 +1,10 @@ +$text: #fff; +$accent_text: #fff; +$link: #5d86dd; +$accent: #5d86dd; +$background: rgba(#000, 0.1); +$bg_transparent: transparent; +$card: rgba(#000, 0.25); +$tint: rgba(#fff, 0.15); + +@import "../core/main"; diff --git a/app/src/web/assets/css/themes/material_light.css b/app/src/web/assets/css/themes/material_light.css new file mode 100644 index 00000000..c00dd12f --- /dev/null +++ b/app/src/web/assets/css/themes/material_light.css @@ -0,0 +1,338 @@ +[style*=color], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, +._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, +.touched *, ._1_yj, ._1_yl, ._4pj9, ._2bdc, ._3qdh ._3qdn ._3qdk, ._3qdk ._48_q, +._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, .cq, ._usr, +._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, +._1lf4, ._1hiz, ._xod, ._5ag5, ._zmk, ._3t_h, ._5lm6, ._3clv, ._3zlc, ._36rd, +._31zk, ._31zl, ._3xsa, ._3xs9, ._2-4s, ._2fzz ul, ._3z10, +._43mh, .touch .btn, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, +._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, +._18qg, ._1_ac, ._529p, ._4dwt ._1vh3, ._4a5f, ._23_t, ._2rzc, ._23_s, ._2rzd, +._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._36e0, ._4-dy, +._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, .mCount, ._27vc, ._24e1, ._2rbw, ._3iyw ._3mzw, +textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, +._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, +._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._38d-, ._3n8y, ._38dt, ._3oyg, +._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, +._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, +._2new, .appCenterCategorySelectorButton, ._1ksq, ._1kt6, ._6ber, ._mxb, ._3oyd, +div.sharerSelector, .footer, ._4pv_, ._1dbp, ._3kad, ._20zc, ._2i5v, ._2i5w, +a, ._5fpq, ._4gux, ._3bg5 ._52x1, ._3bg5 ._52x2, ._6dsj ._3gin, ._hdn._hdn, +.mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, +._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, +._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, +h1, h2, h3, h4, h5, h6 { + color: #000 !important; +} + +strong > a, ._15ks ._2q8z._2q8z, ._1e3e, .blueName { + color: #3b5998 !important; +} + +._42nf ._42ng { + color: transparent !important; +} + +p > a, .msg span > a { + color: #3b5998 !important; +} + +#viewport { + background: #fafafa !important; +} + +body, :root, #root, #header, #MComposer, [style*=background-color], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, +._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._3qdh, ._8ca, ._3h8i, +._6-l ._2us7, ._6-l ._6-p, ._333v, div.sharerSelector, ._529j, ._305j, ._1pph, ._3t_l, ._4pvz, +._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._24e1, ._-j7, +._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, +._38do, .bo, .cq, ._234-, ._a-5, ._2zh4, ._15ks, ._3oyc, ._36dc, ._3iyw ._3iyx, ._6bes, ._55wo, ._4-dy, +.tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, +.al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._2bdb, ._3ci9, +._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._6be7, +._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._5xp2, div.fullwidthMore, +._577z, ._2u4w, ._3u9p, ._3u9t, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._voz, ._vos, +._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5_ee, ._3clk, +._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, +._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, ._5vq5, ._3tl8, ._65wz, ._4edl, +.acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._1glm, +._ue6, ._hdn._hdn, +._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3bmj, ._5zmb, ._2x2s, ._3kac, ._3kad, +._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, +._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, .error, ._1dbp, ._5zma, ._6beq, ._vi6, +._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, +._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { + background: #fafafa !important; +} + +._31nf, ._2v9s, ._d4i, article._55wo, ._10c_, ._2jl2, ._55wo, ._6150, ._50mi, ._4-dw, ._4_2z { + background: #fff !important; +} + +.aclb { + background: #ddd !important; +} + +._cv_, ._2sq8 { + background-color: #fafafa !important; +} + +#page, ._8l7, ._-j8, ._-j9, ._6o5v { + background: transparent !important; +} + +.jewel, .flyout, ._52z5, ._13e_, ._5-lw, ._5c0e, .jx-result, ._336p, .mentions-suggest-item, ._2suk, +.mentions-suggest, ._1xoz, ._1xow { + background: #fafafa !important; +} + +._403n, ._14v5 ._14v8, ._1-kc { + background: #e6e6e6 !important; +} + +button:not([style*=image]):not(.privacyButtons), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, +._590n, ._4g8h, ._2cpp, ._58a0.touched:after, +.timeline .timelinePublisher, .touched, .sharerAttachment, +.item a.primary.touched .primarywrap, ._38nq, ._537a, +._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, +.excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._6dsj ._3gin, ._69aj, +._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, +._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._5a5j, +._2b06, ._2tsf, ._3gka, .mCount, ._27vc, ._4pv-, ._6pk5, +._4qax, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, +#addMembersTypeahead .mToken.mTokenWeakReference, +.acbk { + background: rgba(230, 230, 230, 0.35) !important; +} + +.mQuestionsPollResultsBar .shaded { + background: #3b5998 !important; +} + +._220g, ._1_y8:after, ._6pk6, +._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, +._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { + background: rgba(0, 0, 0, 0.3) !important; +} + +button ._v89 ._54k8._1fl1 { + background: #3b5998 !important; +} + +._15kl::before, ._37fd .inlineComposerButton, ._1hb:before, +._5j35::after, ._2k4b, ._3to7, ._4nw8 { + border-left: 1px solid rgba(0, 0, 0, 0.3) !important; +} + +._4_d1, ._5cni { + border-right: 1px solid rgba(0, 0, 0, 0.3) !important; +} + +._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, +._2pbp, ._5rou:first-child, ._egf:first-child, ._io2, ._3qdi ._48_m::after, +._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, +._3u9t, ._55fj, .mEventProfileSection.useBorder td, ._3ils, ._5as0, ._5as2, +._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { + border-top: 1px solid rgba(0, 0, 0, 0.3) !important; +} + +._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, +._400s, ._5hoc, ._1bhn, ._5ag6, ._4pvz, +._301x, ._x08 ._x0a:after, ._36dc, ._6-l ._57jn, ._527k, ._g_k, +._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, ._2bdc, ._3ci9, +.mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._38do, ._38dt, +._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .error, ._35--, ._1wev, +.jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, +._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, +._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, +._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, +._5fjw > :first-child { + border-bottom: 1px solid rgba(0, 0, 0, 0.3) !important; +} + +.item a.primary.touched .primarywrap, ._4dwt ._5y33, ._1ih_, ._5_50, ._6beq, ._69aj, +._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq, ._4-dy { + border-top: 1px solid rgba(0, 0, 0, 0.3) !important; + border-bottom: 1px solid rgba(0, 0, 0, 0.3) !important; +} + +._d4i, ._f6s, .mentions-suggest-item, .mentions-suggest, .sharerAttachment, +.mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .mQuestionsPollResultsBar, +._15q7, ._2q7v, ._4dwt ._16ii, ._3qdi::after, +._2q7w, .acy, ._58ak, ._3t_l, ._4msa, ._3h8i, ._3clk, ._1kt6, ._1ksq, +._1_y5, ._lr0, ._5hgt, ._2cpp, ._50uu, ._50uw, ._31yd, ._1e3d, ._3xz7, ._1xoz, +._4kcb, ._2lut, .jewel .touchable-notification.touched, .touchable-notification .touchable.touched, +.home-notification .touchable.touched, ._6beo ._6ber, +._73ku ._73jw, +._4e8n, ._uww, .mentions-placeholder, .mentions-shadow, .mentions-measurer, +._5whq, ._59tt, ._41ft::after, .jx-tokenizer, ._3uqf, ._4756, ._1rrd, ._5n_f { + border: 1px solid rgba(0, 0, 0, 0.3) !important; +} + +.mQuestionsPollResultsBar .shaded, ._1027._13sm { + border: 1px solid #000 !important; +} + +._3gka { + border: 1px dashed rgba(0, 0, 0, 0.3) !important; +} + +._4o58::after, .acr, ._t21, ._2bdb, +.acw, .aclb, ._4qax, ._5h8f { + border-color: rgba(0, 0, 0, 0.3) !important; +} + +._15ks ._15kl::before { + border-left: 1px solid transparent !important; +} + +._56bf, .touch .btn { + border-radius: 0 !important; + border: 0 !important; +} + +._2cis { + border-left: 10px solid #fafafa !important; + border-right: 10px solid #fafafa !important; +} + +._2cir.selected, ._42rv, ._5zma, ._2x2s { + border-bottom: 3px solid #000 !important; +} + +._1ss6 { + border-left: 2px solid #000 !important; +} + +._484w.selected > ._6zf, ._5kqs::after, ._3lvo ._5xum._5xuk, ._x0b { + border-bottom: 1px solid #000 !important; +} + +._34ee { + background: rgba(230, 230, 230, 0.35) !important; + color: #000 !important; +} + +._34em ._34ee { + background: #3b5998 !important; + color: #fff !important; +} + +._5as0, ._5cni, ._5as2 { + background: #fafafa !important; +} + +*, *::after, *::before { + text-shadow: none !important; + box-shadow: none !important; +} + +[data-sigil=m_login_upsell], +[data-sigil="m-loading-indicator-animate m-loading-indicator-root"] { + display: none !important; +} + +::-webkit-input-placeholder { + color: #000 !important; +} + +:-moz-placeholder { + color: #000 !important; +} + +::-moz-placeholder { + color: #000 !important; +} + +:-ms-input-placeholder { + color: #000 !important; +} + +.excessItem { + outline: rgba(0, 0, 0, 0.3) !important; +} + +._3m1m { + background: linear-gradient(transparent, #fafafa) !important; +} + +@-webkit-keyframes highlightFade { + 0%, 50% { + background: rgba(230, 230, 230, 0.35); + } + 100% { + background: #fafafa; + } +} +@-moz-keyframes highlightFade { + 0%, 50% { + background: rgba(230, 230, 230, 0.35); + } + 100% { + background: #fafafa; + } +} +@keyframes highlightFade { + 0%, 50% { + background: rgba(230, 230, 230, 0.35); + } + 100% { + background: #fafafa; + } +} +@-webkit-keyframes chatHighlightAnimation { + 0%, 100% { + background: #fafafa; + } + 50% { + background: rgba(230, 230, 230, 0.35); + } +} +@-moz-keyframes chatHighlightAnimation { + 0%, 100% { + background: #fafafa; + } + 50% { + background: rgba(230, 230, 230, 0.35); + } +} +@keyframes chatHighlightAnimation { + 0%, 100% { + background: #fafafa; + } + 50% { + background: rgba(230, 230, 230, 0.35); + } +} +._50uu { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23000" viewBox="0 -10 50 50"%3E%3Ccircle cx="25" cy="23" r="3.2"/%3E%3Cpath d="M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"/%3E%3Cpath fill="none" d="M13 11h24v24H13z"/%3E%3C/svg%3E') no-repeat !important; +} + +._50uw { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23000" viewBox="0 0 50 50"%3E%3Cpath fill="none" d="M13 26h24v24H13z"/%3E%3Cpath d="M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z"/%3E%3C/svg%3E') no-repeat !important; +} + +._15km ._15ko::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23000" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15ko._77la::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%233b5998" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath d="M1 21h4V9H1v12zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73v-1.91l-.01-.01L23 10z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kq::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23000" viewBox="0 0 24 24"%3E%3Cpath d="M21.99 4c0-1.1-.89-2-1.99-2H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h14l4 4-.01-18z"/%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +._15km ._15kr::before { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" fill="%23000" viewBox="0 0 24 24"%3E%3Cpath d="M14 9V5l7 7-7 7v-4.1c-5 0-8.5 1.6-11 5.1 1-5 4-10 11-11z"/%3E%3Cpath fill="none" d="M24 0H0v24h24z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} + +.story_body_container i.img[data-sigil*=story-popup-context] { + background: url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"%3E%3Cpath fill="none" d="M0 0h24v24H0z"/%3E%3Cpath fill="%23000" d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"/%3E%3C/svg%3E') no-repeat !important; + background-position: center !important; +} diff --git a/app/src/web/assets/css/themes/material_light.scss b/app/src/web/assets/css/themes/material_light.scss new file mode 100644 index 00000000..7ec58463 --- /dev/null +++ b/app/src/web/assets/css/themes/material_light.scss @@ -0,0 +1,15 @@ +$text: #000; +$accent_text: #fff; +$link: #3b5998; +$accent: #3b5998; +$background: #fafafa; +// this is actually the inverse of material light (bg should be gray, cards should be white), +// but it looks better than the alternative +$background2: rgba(darken($background, 8%), 0.35); + +$bg_transparent: $background; + +$card: #fff; +$tint: #ddd; + +@import "../core/main"; \ No newline at end of file diff --git a/app/src/web/assets/js/click_a.js b/app/src/web/assets/js/click_a.js new file mode 100644 index 00000000..7faafc15 --- /dev/null +++ b/app/src/web/assets/js/click_a.js @@ -0,0 +1,55 @@ +"use strict"; +(function () { + var prevented = false; + var _frostAClick = function (e) { + // check for valid target + var target = e.target || e.currentTarget || e.srcElement; + if (!(target instanceof Element)) { + console.log("No element found"); + return; + } + var element = target; + // Notifications are two layers under + for (var i = 0; i < 2; i++) { + if (element.tagName !== 'A') { + element = element.parentElement; + } + } + if (element.tagName === 'A') { + if (!prevented) { + var url = element.getAttribute('href'); + if (!url || url === '#') { + return; + } + console.log("Click intercept " + url); + // If Frost is injected, check if loading the url through an overlay works + if (Frost.loadUrl(url)) { + e.stopPropagation(); + e.preventDefault(); + } + } + else { + console.log("Click intercept prevented"); + } + } + }; + /* + * On top of the click event, we must stop it for long presses + * Since that will conflict with the context menu + * Note that we only override it on conditions where the context menu + * Will occur + */ + var _frostPreventClick = function () { + console.log("Click _frostPrevented"); + prevented = true; + }; + document.addEventListener('click', _frostAClick, true); + var clickTimeout = undefined; + document.addEventListener('touchstart', function () { + clickTimeout = setTimeout(_frostPreventClick, 400); + }, true); + document.addEventListener('touchend', function () { + prevented = false; + clearTimeout(clickTimeout); + }, true); +}).call(undefined); diff --git a/app/src/web/assets/js/click_a.ts b/app/src/web/assets/js/click_a.ts new file mode 100644 index 00000000..5023610e --- /dev/null +++ b/app/src/web/assets/js/click_a.ts @@ -0,0 +1,57 @@ +(function () { + let prevented = false; + + const _frostAClick = (e: Event) => { + // check for valid target + const target = e.target || e.currentTarget || e.srcElement; + if (!(target instanceof Element)) { + console.log("No element found"); + return + } + let element: Element = target; + // Notifications are two layers under + for (let i = 0; i < 2; i++) { + if (element.tagName !== 'A') { + element = element.parentElement; + } + } + if (element.tagName === 'A') { + if (!prevented) { + const url = element.getAttribute('href'); + if (!url || url === '#') { + return + } + console.log(`Click intercept ${url}`); + // If Frost is injected, check if loading the url through an overlay works + if (Frost.loadUrl(url)) { + e.stopPropagation(); + e.preventDefault(); + } + } else { + console.log("Click intercept prevented") + } + } + }; + + /* + * On top of the click event, we must stop it for long presses + * Since that will conflict with the context menu + * Note that we only override it on conditions where the context menu + * Will occur + */ + const _frostPreventClick = () => { + console.log("Click _frostPrevented"); + prevented = true; + }; + + document.addEventListener('click', _frostAClick, true); + let clickTimeout: number | undefined = undefined; + document.addEventListener('touchstart', () => { + clickTimeout = setTimeout(_frostPreventClick, 400); + }, true); + document.addEventListener('touchend', () => { + prevented = false; + clearTimeout(clickTimeout) + }, true); +}).call(undefined); + diff --git a/app/src/web/assets/js/click_debugger.js b/app/src/web/assets/js/click_debugger.js new file mode 100644 index 00000000..aab4572d --- /dev/null +++ b/app/src/web/assets/js/click_debugger.js @@ -0,0 +1,14 @@ +"use strict"; +// For desktop only +(function () { + var _frostAContext = function (e) { + // Commonality; check for valid target + var element = e.target || e.currentTarget || e.srcElement; + if (!(element instanceof Element)) { + console.log("No element found"); + return; + } + console.log("Clicked element " + element.tagName + " " + element.className); + }; + document.addEventListener('contextmenu', _frostAContext, true); +}).call(undefined); diff --git a/app/src/web/assets/js/click_debugger.ts b/app/src/web/assets/js/click_debugger.ts new file mode 100644 index 00000000..088271fa --- /dev/null +++ b/app/src/web/assets/js/click_debugger.ts @@ -0,0 +1,15 @@ +// For desktop only + +(function () { + const _frostAContext = (e: Event) => { + // Commonality; check for valid target + const element = e.target || e.currentTarget || e.srcElement; + if (!(element instanceof Element)) { + console.log("No element found"); + return + } + console.log(`Clicked element ${element.tagName} ${element.className}`); + }; + + document.addEventListener('contextmenu', _frostAContext, true); +}).call(undefined); diff --git a/app/src/web/assets/js/context_a.js b/app/src/web/assets/js/context_a.js new file mode 100644 index 00000000..7e636cea --- /dev/null +++ b/app/src/web/assets/js/context_a.js @@ -0,0 +1,68 @@ +"use strict"; +/** + * Context menu for links + * Largely mimics click_a.js + */ +(function () { + var longClick = false; + var _frostAContext = function (e) { + Frost.longClick(true); + longClick = true; + /* + * Commonality; check for valid target + */ + var target = e.target || e.currentTarget || e.srcElement; + if (!(target instanceof Element)) { + console.log("No element found"); + return; + } + var element = target; + // Notifications are two layers under + for (var i = 0; i < 2; i++) { + if (element.tagName != 'A') { + element = element.parentElement; + } + } + if (element.tagName == 'A') { + var url = element.getAttribute('href'); + if (!url || url == '#') { + return; + } + var text = element.parentElement.innerText; + // Check if image item exists, first in children and then in parent + var image = element.querySelector("[style*=\"background-image: url(\"]"); + if (!image) { + image = element.parentElement.querySelector("[style*=\"background-image: url(\"]"); + } + if (image) { + var imageUrl = window.getComputedStyle(image, null).backgroundImage.trim().slice(4, -1); + console.log("Context image: " + imageUrl); + Frost.loadImage(imageUrl, text); + e.stopPropagation(); + e.preventDefault(); + return; + } + // Check if true img exists + var img = element.querySelector("img[src*=scontent]"); + if (img instanceof HTMLMediaElement) { + var imgUrl = img.src; + console.log("Context img: " + imgUrl); + Frost.loadImage(imgUrl, text); + e.stopPropagation(); + e.preventDefault(); + return; + } + console.log("Context content " + url + " " + text); + Frost.contextMenu(url, text); + e.stopPropagation(); + e.preventDefault(); + } + }; + document.addEventListener('contextmenu', _frostAContext, true); + document.addEventListener('touchend', function () { + if (longClick) { + Frost.longClick(false); + longClick = false; + } + }, true); +}).call(undefined); diff --git a/app/src/web/assets/js/context_a.ts b/app/src/web/assets/js/context_a.ts new file mode 100644 index 00000000..16ed33a9 --- /dev/null +++ b/app/src/web/assets/js/context_a.ts @@ -0,0 +1,69 @@ +/** + * Context menu for links + * Largely mimics click_a.js + */ +(function () { + let longClick = false; + const _frostAContext = (e: Event) => { + Frost.longClick(true); + longClick = true; + + /* + * Commonality; check for valid target + */ + const target = e.target || e.currentTarget || e.srcElement; + if (!(target instanceof Element)) { + console.log("No element found"); + return + } + let element: Element = target; + // Notifications are two layers under + for (let i = 0; i < 2; i++) { + if (element.tagName != 'A') { + element = element.parentElement; + } + } + if (element.tagName == 'A') { + const url = element.getAttribute('href'); + if (!url || url == '#') { + return + } + const text = (element.parentElement).innerText; + // Check if image item exists, first in children and then in parent + let image = element.querySelector("[style*=\"background-image: url(\"]"); + if (!image) { + image = (element.parentElement).querySelector("[style*=\"background-image: url(\"]") + } + if (image) { + const imageUrl = (window.getComputedStyle(image, null).backgroundImage).trim().slice(4, -1); + console.log(`Context image: ${imageUrl}`); + Frost.loadImage(imageUrl, text); + e.stopPropagation(); + e.preventDefault(); + return + } + // Check if true img exists + const img = element.querySelector("img[src*=scontent]"); + if (img instanceof HTMLMediaElement) { + const imgUrl = img.src; + console.log(`Context img: ${imgUrl}`); + Frost.loadImage(imgUrl, text); + e.stopPropagation(); + e.preventDefault(); + return + } + console.log(`Context content ${url} ${text}`); + Frost.contextMenu(url, text); + e.stopPropagation(); + e.preventDefault(); + } + }; + + document.addEventListener('contextmenu', _frostAContext, true); + document.addEventListener('touchend', () => { + if (longClick) { + Frost.longClick(false); + longClick = false + } + }, true); +}).call(undefined); diff --git a/app/src/web/assets/js/document_watcher.js b/app/src/web/assets/js/document_watcher.js new file mode 100644 index 00000000..f3c4ab25 --- /dev/null +++ b/app/src/web/assets/js/document_watcher.js @@ -0,0 +1,24 @@ +"use strict"; +// Emit key once half the viewport is covered +(function () { + var isReady = function () { + return document.body.scrollHeight > innerHeight + 100; + }; + if (isReady()) { + console.log('Already ready'); + Frost.isReady(); + return; + } + console.log('Injected document watcher'); + var observer = new MutationObserver(function () { + if (isReady()) { + observer.disconnect(); + Frost.isReady(); + console.log("Documented surpassed height in " + performance.now()); + } + }); + observer.observe(document, { + childList: true, + subtree: true + }); +}).call(undefined); diff --git a/app/src/web/assets/js/document_watcher.ts b/app/src/web/assets/js/document_watcher.ts new file mode 100644 index 00000000..e671149c --- /dev/null +++ b/app/src/web/assets/js/document_watcher.ts @@ -0,0 +1,27 @@ +// Emit key once half the viewport is covered +(function () { + const isReady = () => { + return document.body.scrollHeight > innerHeight + 100 + }; + + if (isReady()) { + console.log('Already ready'); + Frost.isReady(); + return + } + + console.log('Injected document watcher'); + + const observer = new MutationObserver(() => { + if (isReady()) { + observer.disconnect(); + Frost.isReady(); + console.log(`Documented surpassed height in ${performance.now()}`); + } + }); + + observer.observe(document, { + childList: true, + subtree: true + }) +}).call(undefined); diff --git a/app/src/web/assets/js/header_badges.js b/app/src/web/assets/js/header_badges.js new file mode 100644 index 00000000..daaf540a --- /dev/null +++ b/app/src/web/assets/js/header_badges.js @@ -0,0 +1,8 @@ +"use strict"; +// Fetches the header contents if it exists +(function () { + var header = document.getElementById('mJewelNav'); + if (header) { + Frost.handleHeader(header.outerHTML); + } +}).call(undefined); diff --git a/app/src/web/assets/js/header_badges.ts b/app/src/web/assets/js/header_badges.ts new file mode 100644 index 00000000..473749f2 --- /dev/null +++ b/app/src/web/assets/js/header_badges.ts @@ -0,0 +1,7 @@ +// Fetches the header contents if it exists +(function() { + const header = document.getElementById('mJewelNav'); + if (header) { + Frost.handleHeader(header.outerHTML); + } +}).call(undefined); diff --git a/app/src/web/assets/js/header_hider.js b/app/src/web/assets/js/header_hider.js new file mode 100644 index 00000000..faa9f66d --- /dev/null +++ b/app/src/web/assets/js/header_hider.js @@ -0,0 +1,12 @@ +"use strict"; +(function () { + var header = document.querySelector('#header'); + if (!header) { + return; + } + var jewel = header.querySelector('#mJewelNav'); + if (!jewel) { + return; + } + header.style.display = 'none'; +}).call(undefined); diff --git a/app/src/web/assets/js/header_hider.ts b/app/src/web/assets/js/header_hider.ts new file mode 100644 index 00000000..1a8f27f2 --- /dev/null +++ b/app/src/web/assets/js/header_hider.ts @@ -0,0 +1,17 @@ +(function () { + const header = document.querySelector('#header'); + + if (!header) { + return + } + + const jewel = header.querySelector('#mJewelNav'); + + if (!jewel) { + return + } + + (header).style.display = 'none' +}).call(undefined); + + diff --git a/app/src/web/assets/js/media.js b/app/src/web/assets/js/media.js new file mode 100644 index 00000000..571168d6 --- /dev/null +++ b/app/src/web/assets/js/media.js @@ -0,0 +1,43 @@ +"use strict"; +// Handles media events +(function () { + var _frostMediaClick = function (e) { + var target = e.target || e.srcElement; + if (!(target instanceof HTMLElement)) { + return; + } + var element = target; + var dataset = element.dataset; + if (!dataset || !dataset.sigil || dataset.sigil.toLowerCase().indexOf('inlinevideo') == -1) { + return; + } + var i = 0; + while (!element.hasAttribute('data-store')) { + if (++i > 2) { + return; + } + element = element.parentNode; + } + var store = element.dataset.store; + if (!store) { + return; + } + var dataStore; + try { + dataStore = JSON.parse(store); + } + catch (e) { + return; + } + var url = dataStore.src; + // !startsWith; see https://stackoverflow.com/a/36876507/4407321 + if (!url || url.lastIndexOf('http', 0) !== 0) { + return; + } + console.log("Inline video " + url); + if (Frost.loadVideo(url, dataStore.animatedGifVideo || false)) { + e.stopPropagation(); + } + }; + document.addEventListener('click', _frostMediaClick, true); +}).call(undefined); diff --git a/app/src/web/assets/js/media.ts b/app/src/web/assets/js/media.ts new file mode 100644 index 00000000..5b9b1a54 --- /dev/null +++ b/app/src/web/assets/js/media.ts @@ -0,0 +1,47 @@ +// Handles media events +(function () { + const _frostMediaClick = (e: Event) => { + const target = e.target || e.srcElement; + if (!(target instanceof HTMLElement)) { + return + } + let element: HTMLElement = target; + const dataset = element.dataset; + if (!dataset || !dataset.sigil || dataset.sigil.toLowerCase().indexOf('inlinevideo') == -1) { + return + } + let i = 0; + while (!element.hasAttribute('data-store')) { + if (++i > 2) { + return + } + element = element.parentNode; + } + const store = element.dataset.store; + if (!store) { + return + } + + let dataStore; + + try { + dataStore = JSON.parse(store) + } catch (e) { + return + } + + const url = dataStore.src; + + // !startsWith; see https://stackoverflow.com/a/36876507/4407321 + if (!url || url.lastIndexOf('http', 0) !== 0) { + return + } + + console.log(`Inline video ${url}`); + if (Frost.loadVideo(url, dataStore.animatedGifVideo || false)) { + e.stopPropagation() + } + }; + + document.addEventListener('click', _frostMediaClick, true); +}).call(undefined); diff --git a/app/src/web/assets/js/menu.js b/app/src/web/assets/js/menu.js new file mode 100644 index 00000000..c30e93cf --- /dev/null +++ b/app/src/web/assets/js/menu.js @@ -0,0 +1,57 @@ +"use strict"; +// Click menu and move contents to main view +(function () { + var viewport = document.querySelector("#viewport"); + var root = document.querySelector("#root"); + var bookmarkJewel = document.querySelector("#bookmarks_jewel"); + if (!viewport || !root || !bookmarkJewel) { + console.log('Menu.js: main elements not found'); + Frost.emit(0); + return; + } + var menuA = bookmarkJewel.querySelector("a"); + if (!menuA) { + console.log('Menu.js: menu links not found'); + Frost.emit(0); + return; + } + var jewel = document.querySelector('#mJewelNav'); + if (!jewel) { + console.log('Menu.js: jewel is null'); + return; + } + var y = new MutationObserver(function () { + viewport.removeAttribute('style'); + root.removeAttribute('style'); + }); + y.observe(viewport, { + attributes: true + }); + y.observe(root, { + attributes: true + }); + var x = new MutationObserver(function () { + var menu = document.querySelector('.mSideMenu'); + if (menu) { + x.disconnect(); + console.log("Found side menu"); + // Transfer elements + while (root.firstChild) { + root.removeChild(root.firstChild); + } + while (menu.childNodes.length) { + viewport.appendChild(menu.childNodes[0]); + } + Frost.emit(0); + setTimeout(function () { + y.disconnect(); + console.log('Unhook styler'); + }, 500); + } + }); + x.observe(jewel, { + childList: true, + subtree: true + }); + menuA.click(); +}).call(undefined); diff --git a/app/src/web/assets/js/menu.ts b/app/src/web/assets/js/menu.ts new file mode 100644 index 00000000..6f9dbf16 --- /dev/null +++ b/app/src/web/assets/js/menu.ts @@ -0,0 +1,59 @@ +// Click menu and move contents to main view +(function () { + const viewport = document.querySelector("#viewport"); + const root = document.querySelector("#root"); + const bookmarkJewel = document.querySelector("#bookmarks_jewel"); + if (!viewport || !root || !bookmarkJewel) { + console.log('Menu.js: main elements not found'); + Frost.emit(0); + return + } + const menuA = bookmarkJewel.querySelector("a"); + if (!menuA) { + console.log('Menu.js: menu links not found'); + Frost.emit(0); + return + } + const jewel = document.querySelector('#mJewelNav'); + if (!jewel) { + console.log('Menu.js: jewel is null'); + return + } + + const y = new MutationObserver(() => { + viewport.removeAttribute('style'); + root.removeAttribute('style'); + }); + + y.observe(viewport, { + attributes: true + }); + y.observe(root, { + attributes: true + }); + + const x = new MutationObserver(() => { + const menu = document.querySelector('.mSideMenu'); + if (menu) { + x.disconnect(); + console.log("Found side menu"); + // Transfer elements + while (root.firstChild) { + root.removeChild(root.firstChild); + } + while (menu.childNodes.length) { + viewport.appendChild(menu.childNodes[0]); + } + Frost.emit(0); + setTimeout(() => { + y.disconnect(); + console.log('Unhook styler'); + }, 500); + } + }); + x.observe(jewel, { + childList: true, + subtree: true + }); + menuA.click(); +}).call(undefined); diff --git a/app/src/web/assets/js/notif_msg.js b/app/src/web/assets/js/notif_msg.js new file mode 100644 index 00000000..20a89e88 --- /dev/null +++ b/app/src/web/assets/js/notif_msg.js @@ -0,0 +1,26 @@ +"use strict"; +// Binds callback to an invisible webview to take in the search events +(function () { + var finished = false; + var x = new MutationObserver(function () { + var _f_thread = document.querySelector('#threadlist_rows'); + if (!_f_thread) { + return; + } + console.log("Found message threads " + _f_thread.outerHTML); + Frost.handleHtml(_f_thread.outerHTML); + finished = true; + x.disconnect(); + }); + x.observe(document, { + childList: true, + subtree: true + }); + setTimeout(function () { + if (!finished) { + finished = true; + console.log('Message thread timeout cancellation'); + Frost.handleHtml(""); + } + }, 20000); +}).call(undefined); diff --git a/app/src/web/assets/js/notif_msg.ts b/app/src/web/assets/js/notif_msg.ts new file mode 100644 index 00000000..b7ce7a19 --- /dev/null +++ b/app/src/web/assets/js/notif_msg.ts @@ -0,0 +1,25 @@ +// Binds callback to an invisible webview to take in the search events +(function () { + let finished = false; + const x = new MutationObserver(() => { + const _f_thread = document.querySelector('#threadlist_rows'); + if (!_f_thread) { + return + } + console.log(`Found message threads ${_f_thread.outerHTML}`); + Frost.handleHtml(_f_thread.outerHTML); + finished = true; + x.disconnect(); + }); + x.observe(document, { + childList: true, + subtree: true + }); + setTimeout(() => { + if (!finished) { + finished = true; + console.log('Message thread timeout cancellation'); + Frost.handleHtml("") + } + }, 20000); +}).call(undefined); diff --git a/app/src/web/assets/js/textarea_listener.js b/app/src/web/assets/js/textarea_listener.js new file mode 100644 index 00000000..9a8783c1 --- /dev/null +++ b/app/src/web/assets/js/textarea_listener.js @@ -0,0 +1,31 @@ +"use strict"; +/* + * focus listener for textareas + * since swipe to refresh is quite sensitive, we will disable it + * when we detect a user typing + * note that this extends passed having a keyboard opened, + * as a user may still be reviewing his/her post + * swiping should automatically be reset on refresh + */ +(function () { + var _frostFocus = function (e) { + var element = e.target || e.srcElement; + if (!(element instanceof Element)) { + return; + } + console.log("FrostJSI focus, " + element.tagName); + if (element.tagName == 'TEXTAREA') { + Frost.disableSwipeRefresh(true); + } + }; + var _frostBlur = function (e) { + var element = e.target || e.srcElement; + if (!(element instanceof Element)) { + return; + } + console.log("FrostJSI blur, " + element.tagName); + Frost.disableSwipeRefresh(false); + }; + document.addEventListener("focus", _frostFocus, true); + document.addEventListener("blur", _frostBlur, true); +}).call(undefined); diff --git a/app/src/web/assets/js/textarea_listener.ts b/app/src/web/assets/js/textarea_listener.ts new file mode 100644 index 00000000..9d5fd388 --- /dev/null +++ b/app/src/web/assets/js/textarea_listener.ts @@ -0,0 +1,31 @@ +/* + * focus listener for textareas + * since swipe to refresh is quite sensitive, we will disable it + * when we detect a user typing + * note that this extends passed having a keyboard opened, + * as a user may still be reviewing his/her post + * swiping should automatically be reset on refresh + */ +(function () { + const _frostFocus = (e: Event) => { + const element = e.target || e.srcElement; + if (!(element instanceof Element)) { + return + } + console.log(`FrostJSI focus, ${element.tagName}`); + if (element.tagName == 'TEXTAREA') { + Frost.disableSwipeRefresh(true); + } + }; + + const _frostBlur = (e: Event) => { + const element = e.target || e.srcElement; + if (!(element instanceof Element)) { + return + } + console.log(`FrostJSI blur, ${element.tagName}`); + Frost.disableSwipeRefresh(false); + }; + document.addEventListener("focus", _frostFocus, true); + document.addEventListener("blur", _frostBlur, true); +}).call(undefined); diff --git a/app/src/web/assets/pgl.yoyo.org.txt b/app/src/web/assets/pgl.yoyo.org.txt new file mode 100644 index 00000000..63d6fa41 --- /dev/null +++ b/app/src/web/assets/pgl.yoyo.org.txt @@ -0,0 +1,2409 @@ +101com.com +101order.com +123found.com +180hits.de +180searchassistant.com +1x1rank.com +207.net +247media.com +24log.com +24log.de +24pm-affiliation.com +2mdn.net +2o7.net +360yield.com +4affiliate.net +4d5.net +50websads.com +518ad.com +51yes.com +600z.com +777partner.com +777seo.com +77tracking.com +7bpeople.com +7search.com +99count.com +a-ads.com +a-counter.kiev.ua +a.0day.kiev.ua +a.aproductmsg.com +a.collective-media.net +a.consumer.net +a.mktw.net +a.sakh.com +a.ucoz.net +a.ucoz.ru +a.xanga.com +a32.g.a.yimg.com +aaddzz.com +abacho.net +abc-ads.com +absoluteclickscom.com +abz.com +ac.rnm.ca +accounts.pkr.com.invalid +acsseo.com +actionsplash.com +actualdeals.com +acuityads.com +ad-balancer.at +ad-balancer.net +ad-center.com +ad-images.suntimes.com +ad-pay.de +ad-rotator.com +ad-server.gulasidorna.se +ad-serverparc.nl +ad-souk.com +ad-space.net +ad-tech.com +ad-up.com +ad.100.tbn.ru +ad.71i.de +ad.980x.com +ad.a8.net +ad.abcnews.com +ad.abctv.com +ad.about.com +ad.aboutit.de +ad.aboutwebservices.com +ad.abum.com +ad.afy11.net +ad.allstar.cz +ad.altervista.org +ad.amgdgt.com +ad.anuntis.com +ad.auditude.com +ad.bizo.com +ad.bnmla.com +ad.bondage.com +ad.caradisiac.com +ad.centrum.cz +ad.cgi.cz +ad.choiceradio.com +ad.clix.pt +ad.cooks.com +ad.crwdcntrl.net +ad.digitallook.com +ad.directrev.com +ad.doctissimo.fr +ad.domainfactory.de +ad.e-kolay.net +ad.eurosport.com +ad.f1cd.ru +ad.flurry.com +ad.foxnetworks.com +ad.freecity.de +ad.gate24.ch +ad.globe7.com +ad.grafika.cz +ad.hbv.de +ad.hodomobile.com +ad.httpool.com +ad.hyena.cz +ad.iinfo.cz +ad.ilove.ch +ad.infoseek.com +ad.jamba.net +ad.jamster.co.uk +ad.jetsoftware.com +ad.keenspace.com +ad.leadbolt.net +ad.liveinternet.ru +ad.lupa.cz +ad.m5prod.net +ad.media-servers.net +ad.mediastorm.hu +ad.mgd.de +ad.musicmatch.com +ad.nachtagenten.de +ad.nozonedata.com +ad.nttnavi.co.jp +ad.nwt.cz +ad.onad.eu +ad.pandora.tv +ad.playground.ru +ad.preferances.com +ad.profiwin.de +ad.prv.pl +ad.rambler.ru +ad.reunion.com +ad.scanmedios.com +ad.sensismediasmart.com.au +ad.seznam.cz +ad.simgames.net +ad.slutload.com +ad.smartclip.net +ad.tbn.ru +ad.technoratimedia.com +ad.thewheelof.com +ad.top50.to +ad.turn.com +ad.tv2.no +ad.twitchguru.com +ad.usatoday.com +ad.virtual-nights.com +ad.watch.impress.co.jp +ad.wavu.hu +ad.way.cz +ad.weatherbug.com +ad.wsod.com +ad.wz.cz +ad.yadro.ru +ad.yourmedia.com +ad.zanox.com +ad0.bigmir.net +ad01.mediacorpsingapore.com +ad1.emediate.dk +ad1.emule-project.org +ad1.kde.cz +ad1.pamedia.com.au +ad2.iinfo.cz +ad2.ip.ro +ad2.linxcz.cz +ad2.lupa.cz +ad2flash.com +ad2games.com +ad3.iinfo.cz +ad3.pamedia.com.au +ad4game.com +adaction.de +adadvisor.net +adap.tv +adapt.tv +adbanner.ro +adbard.net +adblade.com +adblockanalytics.com +adboost.de.vu +adboost.net +adbooth.net +adbot.com +adbrite.com +adbroker.de +adbunker.com +adbutler.com +adbutler.de +adbuyer.com +adbuyer3.lycos.com +adcash.com +adcast.deviantart.com +adcell.de +adcenter.mdf.se +adcenter.net +adcentriconline.com +adcept.net +adclick.com +adclient.uimserv.net +adclient1.tucows.com +adcloud.net +adcomplete.com +adconion.com +adcontent.gamespy.com +adcycle.com +add.newmedia.cz +addealing.com +addesktop.com +addfreestats.com +addme.com +adecn.com +ademails.com +adengage.com +adexpose.com +adext.inkclub.com +adf.ly +adfactor.nl +adfarm.mediaplex.com +adflight.com +adforce.com +adform.com +adgardener.com +adgoto.com +adgridwork.com +adhese.be +adhese.com +adi.mainichi.co.jp +adimage.asiaone.com.sg +adimage.guardian.co.uk +adimages.been.com +adimages.carsoup.com +adimages.go.com +adimages.homestore.com +adimages.omroepzeeland.nl +adimages.sanomawsoy.fi +adimg.cnet.com +adimg.com.com +adimg.uimserv.net +adimg1.chosun.com +adimgs.sapo.pt +adimpact.com +adinjector.net +adinterax.com +adisfy.com +adition.com +adition.de +adition.net +adizio.com +adjix.com +adjug.com +adjuggler.com +adjuggler.yourdictionary.com +adjustnetwork.com +adk2.com +adk2ads.tictacti.com +adland.ru +adlantic.nl +adledge.com +adlegend.com +adlink.de +adlog.com.com +adloox.com +adlooxtracking.com +adlure.net +admagnet.net +admailtiser.com +adman.gr +adman.in.gr +adman.otenet.gr +admanagement.ch +admanager.btopenworld.com +admanager.carsoup.com +admarketplace.net +admarvel.com +admax.nexage.com +admedia.com +admedia.ro +admeld.com +admerize.be +admeta.com +admex.com +adminder.com +adminshop.com +admized.com +admob.com +admonitor.com +admotion.com.ar +adnet-media.net +adnet.asahi.com +adnet.biz +adnet.de +adnet.ru +adnet.worldreviewer.com +adnetinteractive.com +adnetwork.net +adnetworkperformance.com +adnews.maddog2000.de +adnotch.com +adnxs.com +adocean.pl +adonspot.com +adoperator.com +adorigin.com +adpepper.dk +adpepper.nl +adperium.com +adpia.vn +adplus.co.id +adplxmd.com +adprofile.net +adprojekt.pl +adq.nextag.com +adrazzi.com +adreactor.com +adremedy.com +adreporting.com +adres.internet.com +adrevolver.com +adriver.ru +adrolays.de +adrotate.de +adrotator.se +ads-click.com +ads.4tube.com +ads.5ci.lt +ads.abovetopsecret.com +ads.aceweb.net +ads.activestate.com +ads.adfox.ru +ads.administrator.de +ads.adshareware.net +ads.adultfriendfinder.com +ads.adultswim.com +ads.advance.net +ads.adverline.com +ads.affiliates.match.com +ads.ak.facebook.com.edgesuite.net +ads.allvatar.com +ads.alt.com +ads.alwayson-network.com +ads.amdmb.com +ads.amigos.com +ads.aol.co.uk +ads.aol.com +ads.apn.co.nz +ads.appsgeyser.com +ads.as4x.tmcs.net +ads.as4x.tmcs.ticketmaster.com +ads.asia1.com.sg +ads.asiafriendfinder.com +ads.ask.com +ads.aspalliance.com +ads.avazu.net +ads.batpmturner.com +ads.beenetworks.net +ads.belointeractive.com +ads.berlinonline.de +ads.betanews.com +ads.betfair.com +ads.betfair.com.au +ads.bigchurch.com +ads.bigfoot.com +ads.billiton.de +ads.bing.com +ads.bittorrent.com +ads.blog.com +ads.bloomberg.com +ads.bluelithium.com +ads.bluemountain.com +ads.bluesq.com +ads.bonniercorp.com +ads.boylesports.com +ads.brabys.com +ads.brain.pk +ads.brazzers.com +ads.bumq.com +ads.businessweek.com +ads.canalblog.com +ads.canoe.ca +ads.casinocity.com +ads.cbc.ca +ads.cc +ads.cc-dt.com +ads.centraliprom.com +ads.cgnetworks.com +ads.channel4.com +ads.cimedia.com +ads.clearchannel.com +ads.co.com +ads.com.com +ads.contactmusic.com +ads.contentabc.com +ads.contextweb.com +ads.crakmedia.com +ads.creative-serving.com +ads.creativematch.com +ads.cricbuzz.com +ads.cybersales.cz +ads.dada.it +ads.datinggold.com +ads.datingyes.com +ads.dazoot.ro +ads.deltha.hu +ads.dennisnet.co.uk +ads.desmoinesregister.com +ads.detelefoongids.nl +ads.deviantart.com +ads.digital-digest.com +ads.digitalmedianet.com +ads.digitalpoint.com +ads.directionsmag.com +ads.domeus.com +ads.eagletribune.com +ads.easy-forex.com +ads.eatinparis.com +ads.economist.com +ads.edbindex.dk +ads.egrana.com.br +ads.einmedia.com +ads.electrocelt.com +ads.elitetrader.com +ads.emirates.net.ae +ads.epltalk.com +ads.esmas.com +ads.eu.msn.com +ads.exactdrive.com +ads.expat-blog.biz +ads.expedia.com +ads.ezboard.com +ads.factorymedia.com +ads.fairfax.com.au +ads.faxo.com +ads.ferianc.com +ads.filmup.com +ads.financialcontent.com +ads.flooble.com +ads.fool.com +ads.footymad.net +ads.forbes.com +ads.forbes.net +ads.forium.de +ads.fortunecity.com +ads.fotosidan.se +ads.foxkidseurope.net +ads.foxnetworks.com +ads.foxnews.com +ads.freecity.de +ads.friendfinder.com +ads.ft.com +ads.futurenet.com +ads.gamecity.net +ads.gameforgeads.de +ads.gamershell.com +ads.gamespyid.com +ads.gamigo.de +ads.gaming-universe.de +ads.gawker.com +ads.geekswithblogs.net +ads.glispa.com +ads.globeandmail.com +ads.gmodules.com +ads.godlikeproductions.com +ads.goyk.com +ads.gplusmedia.com +ads.gradfinder.com +ads.grindinggears.com +ads.groundspeak.com +ads.gsm-exchange.com +ads.gsmexchange.com +ads.guardian.co.uk +ads.guardianunlimited.co.uk +ads.guru3d.com +ads.hardwaresecrets.com +ads.harpers.org +ads.hbv.de +ads.hearstmags.com +ads.heartlight.org +ads.heias.com +ads.hideyourarms.com +ads.hollywood.com +ads.horsehero.com +ads.horyzon-media.com +ads.iafrica.com +ads.ibest.com.br +ads.ibryte.com +ads.icq.com +ads.ign.com +ads.img.co.za +ads.imgur.com +ads.indiatimes.com +ads.infi.net +ads.internic.co.il +ads.ipowerweb.com +ads.isoftmarketing.com +ads.itv.com +ads.iwon.com +ads.jewishfriendfinder.com +ads.jiwire.com +ads.jobsite.co.uk +ads.jpost.com +ads.jubii.dk +ads.justhungry.com +ads.kaktuz.net +ads.kelbymediagroup.com +ads.kinobox.cz +ads.kinxxx.com +ads.kompass.com +ads.krawall.de +ads.lesbianpersonals.com +ads.linuxfoundation.org +ads.linuxjournal.com +ads.linuxsecurity.com +ads.livenation.com +ads.mariuana.it +ads.massinfra.nl +ads.mcafee.com +ads.mediaodyssey.com +ads.mediaturf.net +ads.medienhaus.de +ads.mgnetwork.com +ads.mmania.com +ads.moceanads.com +ads.motor-forum.nl +ads.motormedia.nl +ads.msn.com +ads.multimania.lycos.fr +ads.nationalgeographic.com +ads.ncm.com +ads.netclusive.de +ads.netmechanic.com +ads.networksolutions.com +ads.newdream.net +ads.newgrounds.com +ads.newmedia.cz +ads.newsint.co.uk +ads.newsquest.co.uk +ads.ninemsn.com.au +ads.nj.com +ads.nola.com +ads.nordichardware.com +ads.nordichardware.se +ads.nwsource.com +ads.nyi.net +ads.nytimes.com +ads.nyx.cz +ads.nzcity.co.nz +ads.o2.pl +ads.oddschecker.com +ads.okcimg.com +ads.ole.com +ads.olivebrandresponse.com +ads.oneplace.com +ads.ookla.com +ads.optusnet.com.au +ads.outpersonals.com +ads.p161.net +ads.passion.com +ads.pennet.com +ads.penny-arcade.com +ads.pheedo.com +ads.phpclasses.org +ads.pickmeup-ltd.com +ads.pkr.com +ads.planet.nl +ads.pni.com +ads.pof.com +ads.powweb.com +ads.primissima.it +ads.printscr.com +ads.prisacom.com +ads.program3.com +ads.psd2html.com +ads.pushplay.com +ads.quoka.de +ads.rcs.it +ads.recoletos.es +ads.rediff.com +ads.redlightcenter.com +ads.redtube.com +ads.resoom.de +ads.returnpath.net +ads.rottentomatoes.com +ads.rpgdot.com +ads.s3.sitepoint.com +ads.satyamonline.com +ads.savannahnow.com +ads.saymedia.com +ads.scifi.com +ads.seniorfriendfinder.com +ads.sexinyourcity.com +ads.shizmoo.com +ads.shopstyle.com +ads.sift.co.uk +ads.silverdisc.co.uk +ads.slim.com +ads.smartclick.com +ads.soft32.com +ads.space.com +ads.spoonfeduk.com +ads.sptimes.com +ads.stackoverflow.com +ads.stationplay.com +ads.struq.com +ads.sun.com +ads.supplyframe.com +ads.t-online.de +ads.tahono.com +ads.techtv.com +ads.techweb.com +ads.telegraph.co.uk +ads.theglobeandmail.com +ads.themovienation.com +ads.thestar.com +ads.timeout.com +ads.tjwi.info +ads.tmcs.net +ads.totallyfreestuff.com +ads.townhall.com +ads.trinitymirror.co.uk +ads.tripod.com +ads.tripod.lycos.co.uk +ads.tripod.lycos.de +ads.tripod.lycos.es +ads.tripod.lycos.it +ads.tripod.lycos.nl +ads.tripod.spray.se +ads.tso.dennisnet.co.uk +ads.uknetguide.co.uk +ads.ultimate-guitar.com +ads.uncrate.com +ads.undertone.com +ads.usatoday.com +ads.v3.com +ads.verticalresponse.com +ads.vgchartz.com +ads.videosz.com +ads.virtual-nights.com +ads.virtualcountries.com +ads.vnumedia.com +ads.waps.cn +ads.wapx.cn +ads.weather.ca +ads.web.aol.com +ads.web.cs.com +ads.web.de +ads.webmasterpoint.org +ads.websiteservices.com +ads.whi.co.nz +ads.whoishostingthis.com +ads.wiezoekje.nl +ads.wikia.nocookie.net +ads.wineenthusiast.com +ads.wunderground.com +ads.wwe.biz +ads.xhamster.com +ads.xtra.co.nz +ads.y-0.net +ads.yimg.com +ads.yldmgrimg.net +ads.yourfreedvds.com +ads.youtube.com +ads.zdnet.com +ads.ztod.com +ads03.redtube.com +ads1.canoe.ca +ads1.mediacapital.pt +ads1.msn.com +ads1.rne.com +ads1.theglobeandmail.com +ads1.virtual-nights.com +ads10.speedbit.com +ads180.com +ads2.brazzers.com +ads2.clearchannel.com +ads2.contentabc.com +ads2.gamecity.net +ads2.jubii.dk +ads2.net-communities.co.uk +ads2.oneplace.com +ads2.rne.com +ads2.virtual-nights.com +ads2.xnet.cz +ads2004.treiberupdate.de +ads3.contentabc.com +ads3.gamecity.net +ads3.virtual-nights.com +ads4.clearchannel.com +ads4.gamecity.net +ads4.virtual-nights.com +ads4homes.com +ads5.canoe.ca +ads5.virtual-nights.com +ads6.gamecity.net +ads7.gamecity.net +ads8.com +adsatt.abc.starwave.com +Adsatt.ABCNews.starwave.com +adsatt.espn.go.com +adsatt.espn.starwave.com +Adsatt.go.starwave.com +adsby.bidtheatre.com +adscale.de +adscholar.com +adscience.nl +adscpm.com +adsdaq.com +adsdk.com +adsend.de +adserv.evo-x.de +adserv.gamezone.de +adserv.iafrica.com +adserv.qconline.com +adserv.quality-channel.de +adserve.ams.rhythmxchange.com +adserver-live.yoc.mobi +adserver.43plc.com +adserver.71i.de +adserver.adultfriendfinder.com +adserver.aidameter.com +adserver.aol.fr +adserver.barrapunto.com +adserver.beggarspromo.com +adserver.betandwin.de +adserver.bing.com +adserver.bizhat.com +adserver.break-even.it +adserver.cams.com +adserver.clashmusic.com +adserver.com +adserver.digitoday.com +adserver.dotcommedia.de +adserver.finditquick.com +adserver.flossiemediagroup.com +adserver.freecity.de +adserver.freenet.de +adserver.friendfinder.com +adserver.hardsextube.com +adserver.hardwareanalysis.com +adserver.html.it +adserver.irishwebmasterforum.com +adserver.janes.com +adserver.kyoceramita-europe.com +adserver.libero.it +adserver.news.com.au +adserver.ngz-network.de +adserver.nydailynews.com +adserver.o2.pl +adserver.oddschecker.com +adserver.omroepzeeland.nl +adserver.pl +adserver.portalofevil.com +adserver.portugalmail.net +adserver.portugalmail.pt +adserver.quizdingo.com +adserver.realhomesex.net +adserver.sanomawsoy.fi +adserver.sciflicks.com +adserver.sharewareonline.com +adserver.spankaway.com +adserver.startnow.com +adserver.theonering.net +adserver.twitpic.com +adserver.viagogo.com +adserver.virginmedia.com +adserver.yahoo.com +adserver01.de +adserver1-images.backbeatmedia.com +adserver1.backbeatmedia.com +adserver1.mindshare.de +adserver1.mokono.com +adserver1.ogilvy-interactive.de +adserver2.mindshare.de +adserver2.popdata.de +adserverplus.com +adserversolutions.com +adservinginternational.com +adsfac.eu +adsfac.net +adsfac.us +adshost1.com +adside.com +adsk2.co +adskape.ru +adsklick.de +adsmarket.com +adsmart.co.uk +adsmart.com +adsmart.net +adsmogo.com +adsnative.com +adsoftware.com +adsoldier.com +adsonar.com +adspace.ro +adspeed.net +adspirit.de +adsponse.de +adsremote.scrippsnetworks.com +adsrevenue.net +adsrv.deviantart.com +adsrv.eacdn.com +adsrv.iol.co.za +adsrvr.org +adsstat.com +adstat.4u.pl +adstest.weather.com +adsupply.com +adsupplyads.com +adswitcher.com +adsymptotic.com +adsynergy.com +adsys.townnews.com +adsystem.simplemachines.org +adtech.de +adtechus.com +adtegrity.net +adthis.com +adtiger.de +adtoll.com +adtology.com +adtoma.com +adtrace.org +adtrade.net +adtrading.de +adtrak.net +adtriplex.com +adultadvertising.com +adv-adserver.com +adv-banner.libero.it +adv.cooperhosting.net +adv.freeonline.it +adv.hwupgrade.it +adv.livedoor.com +adv.webmd.com +adv.wp.pl +adv.yo.cz +advariant.com +adventory.com +advert.bayarea.com +advert.dyna.ultraweb.hu +adverticum.com +adverticum.net +adverticus.de +advertise.com +advertiseireland.com +advertisespace.com +advertising.com +advertising.guildlaunch.net +advertisingbanners.com +advertisingbox.com +advertmarket.com +advertmedia.de +advertpro.sitepoint.com +advertpro.ya.com +adverts.carltononline.com +advertserve.com +advertstream.com +advertwizard.com +advideo.uimserv.net +adview.ppro.de +advisormedia.cz +adviva.com +adviva.net +advnt.com +adwareremovergold.com +adwhirl.com +adwitserver.com +adworldnetwork.com +adworx.at +adworx.be +adworx.nl +adx.allstar.cz +adx.atnext.com +adxpansion.com +adxpose.com +adxvalue.com +adyea.com +adzerk.net +adzerk.s3.amazonaws.com +adzones.com +af-ad.co.uk +affbuzzads.com +affili.net +affiliate.1800flowers.com +affiliate.7host.com +affiliate.doubleyourdating.com +affiliate.dtiserv.com +affiliate.gamestop.com +affiliate.mercola.com +affiliate.mogs.com +affiliate.offgamers.com +affiliate.travelnow.com +affiliate.viator.com +affiliatefuel.com +affiliatefuture.com +affiliates.allposters.com +affiliates.babylon.com +affiliates.devilfishpartners.com +affiliates.digitalriver.com +affiliates.globat.com +affiliates.ige.com +affiliates.internationaljock.com +affiliates.jlist.com +affiliates.streamray.com +affiliates.thinkhost.net +affiliates.thrixxx.com +affiliates.ultrahosting.com +affiliatetracking.com +affiliatetracking.net +affiliatewindow.com +affiliation-france.com +afftracking.justanswer.com +ah-ha.com +ahalogy.com +aidu-ads.de +aim4media.com +aistat.net +aktrack.pubmatic.com +alclick.com +alenty.com +alexa-sitestats.s3.amazonaws.com +all4spy.com +alladvantage.com +allosponsor.com +amazingcounters.com +amazon-adsystem.com +amung.us +an.tacoda.net +anahtars.com +analytics.adpost.org +analytics.google.com +analytics.live.com +analytics.yahoo.com +anm.intelli-direct.com +annonser.dagbladet.no +apex-ad.com +api.intensifier.de +apture.com +arc1.msn.com +arcadebanners.com +ard.xxxblackbook.com +are-ter.com +as.webmd.com +as1.advfn.com +as2.advfn.com +as5000.com +assets1.exgfnetwork.com +assoc-amazon.com +at-adserver.alltop.com +atdmt.com +athena-ads.wikia.com +atwola.com +auctionads.com +auctionads.net +audience2media.com +audit.median.hu +audit.webinform.hu +auto-bannertausch.de +autohits.dk +avenuea.com +avpa.javalobby.org +avres.net +avsads.com +awempire.com +awin1.com +aylarl.com +azfront.com +b-1st.com +b.aol.com +b.engadget.com +ba.afl.rakuten.co.jp +babs.tv2.dk +backbeatmedia.com +banik.redigy.cz +banner-exchange-24.de +banner.ad.nu +banner.alphacool.de +banner.ambercoastcasino.com +banner.blogranking.net +banner.buempliz-online.ch +banner.casino.net +banner.casinodelrio.com +banner.cotedazurpalace.com +banner.coza.com +banner.cz +banner.easyspace.com +banner.elisa.net +banner.eurogrand.com +banner.featuredusers.com +banner.getgo.de +banner.goldenpalace.com +banner.img.co.za +banner.inyourpocket.com +banner.jobsahead.com +banner.joylandcasino.com +banner.kiev.ua +banner.linux.se +banner.media-system.de +banner.mindshare.de +banner.nixnet.cz +banner.noblepoker.com +banner.northsky.com +banner.orb.net +banner.penguin.cz +banner.prestigecasino.com +banner.rbc.ru +banner.relcom.ru +banner.tanto.de +banner.titan-dsl.de +banner.vadian.net +banner.webmersion.com +banner.wirenode.com +bannerads.de +bannerboxes.com +bannercommunity.de +bannerconnect.com +bannerconnect.net +bannerexchange.cjb.net +bannerflow.com +bannergrabber.internet.gr +bannerhost.com +bannerimage.com +bannerlandia.com.ar +bannermall.com +bannermarkt.nl +bannerpower.com +banners.adultfriendfinder.com +banners.amigos.com +banners.apnuk.com +banners.asiafriendfinder.com +banners.audioholics.com +banners.babylon-x.com +banners.bol.com.br +banners.cams.com +banners.clubseventeen.com +banners.czi.cz +banners.dine.com +banners.direction-x.com +banners.directnic.com +banners.easydns.com +banners.ebay.com +banners.freett.com +banners.friendfinder.com +banners.getiton.com +banners.iq.pl +banners.isoftmarketing.com +banners.lifeserv.com +banners.linkbuddies.com +banners.passion.com +banners.resultonline.com +banners.sexsearch.com +banners.sys-con.com +banners.thomsonlocal.com +banners.videosz.com +banners.virtuagirlhd.com +banners.wunderground.com +bannerserver.com +bannersgomlm.com +bannershotlink.perfectgonzo.com +bannersng.yell.com +bannerspace.com +bannerswap.com +bannery.cz +bannieres.acces-contenu.com +bans.adserver.co.il +bans.bride.ru +barnesandnoble.bfast.com +baypops.com +bbelements.com +bbn.img.com.ua +begun.ru +belstat.com +belstat.nl +berp.com +best-pr.info +best-top.ro +bestsearch.net +bhclicks.com +bidclix.com +bidclix.net +bidtrk.com +bidvertiser.com +bigads.guj.de +bigbangmedia.com +bigclicks.com +billboard.cz +bitads.net +bitmedianetwork.com +bizad.nikkeibp.co.jp +bizrate.com +blast4traffic.com +blingbucks.com +blogads.com +blogcounter.de +blogherads.com +blogrush.com +blogtoplist.se +blogtopsites.com +blueadvertise.com +bluekai.com +bluelithium.com +bluewhaleweb.com +bm.annonce.cz +bn.bfast.com +boersego-ads.de +boldchat.com +boom.ro +boomads.com +boost-my-pr.de +box.anchorfree.net +bpath.com +braincash.com +brandreachsys.com +bravenet.com.invalid +bridgetrack.com +brightinfo.com +british-banners.com +bs.yandex.ru +budsinc.com +bullseye.backbeatmedia.com +buyhitscheap.com +buysellads.com +buzzonclick.com +bvalphaserver.com +bwp.download.com +c.bigmir.net +c.compete.com +c1.nowlinux.com +campaign.bharatmatrimony.com +caniamedia.com +carbonads.com +carbonads.net +casalemedia.com +casalmedia.com +cash4members.com +cash4popup.de +cashcrate.com +cashengines.com +cashfiesta.com +cashlayer.com +cashpartner.com +casinogames.com +casinopays.com +casinorewards.com +casinotraffic.com +casinotreasure.com +cbanners.virtuagirlhd.com +cben1.net +cbmall.com +cbx.net +cdn.freefacti.com +cecash.com +ceskydomov.alias.ngs.modry.cz +cetrk.com +cgicounter.puretec.de +ch.questionmarket.com +channelintelligence.com +chart.dk +chartbeat.com +chartbeat.net +checkm8.com +checkstat.nl +chestionar.ro +chitika.net +cibleclick.com +cityads.telus.net +cj.com +cjbmanagement.com +cjlog.com +claria.com +class-act-clicks.com +click.absoluteagency.com +click.fool.com +click.kmindex.ru +click2freemoney.com +click2paid.com +clickability.com +clickadz.com +clickagents.com +clickbank.com +clickbank.net +clickbooth.com +clickboothlnk.com +clickbrokers.com +clickcompare.co.uk +clickdensity.com +clickedyclick.com +clickhereforcellphones.com +clickhouse.com +clickhype.com +clicklink.jp +clickmedia.ro +clicks.equantum.com +clicks.mods.de +clickserve.cc-dt.com +clicksor.com +clicktag.de +clickthrucash.com +clickthruserver.com +clickthrutraffic.com +clicktrace.info +clicktrack.ziyu.net +clicktracks.com +clicktrade.com +clickxchange.com +clickz.com +clickzxc.com +clicmanager.fr +clients.tbo.com +clixgalore.com +clkads.com +clkrev.com +cluster.adultworld.com +clustrmaps.com +cmpstar.com +cnomy.com +cnt.spbland.ru +cnt1.pocitadlo.cz +code-server.biz +colonize.com +comclick.com +commindo-media-ressourcen.de +commissionmonster.com +compactbanner.com +comprabanner.it +connextra.com +contaxe.de +content.acc-hd.de +content.ad +contextweb.com +conversantmedia.com +conversionruler.com +cookies.cmpnet.com +coremetrics.com +count.rbc.ru +count.rin.ru +count.west263.com +counted.com +counter.avtoindex.com +counter.bloke.com +counter.cnw.cz +counter.cz +counter.dreamhost.com +counter.fateback.com +counter.mirohost.net +counter.mojgorod.ru +counter.nowlinux.com +counter.rambler.ru +counter.search.bg +counter.sparklit.com +counter.yadro.ru +counters.honesty.com +counting.kmindex.ru +counts.tucows.com +coupling-media.de +cpalead.com +cpays.com +cpmaffiliation.com +cpmstar.com +cpxadroit.com +cpxinteractive.com +cqcounter.com +crakmedia.com +craktraffic.com +crawlability.com +crazypopups.com +creafi-online-media.com +creative.ak.facebook.com +creative.whi.co.nz +creatives.as4x.tmcs.net +creatives.livejasmin.com +crispads.com +criteo.com +crowdgravity.com +crtv.mate1.com +crwdcntrl.net +ctnetwork.hu +cubics.com +customad.cnn.com +cyberbounty.com +cybermonitor.com +d.adroll.com +dakic-ia-300.com +danban.com +dapper.net +datashreddergold.com +dbbsrv.com +dc-storm.com +de17a.com +dealdotcom.com +debtbusterloans.com +decknetwork.net +deloo.de +demandbase.com +depilflash.tv +di1.shopping.com +dialerporn.com +didtheyreadit.com +direct-xxx-access.com +directaclick.com +directivepub.com +directleads.com +directorym.com +directtrack.com +discountclick.com +displayadsmedia.com +displaypagerank.com +dist.belnk.com +dmtracker.com +dmtracking.alibaba.com +dmtracking2.alibaba.com +dnads.directnic.com +domaining.in +domainsponsor.com +domainsteam.de +doubleclick.com +doubleclick.de +doubleclick.net +doublepimp.com +drumcash.com +dynamic.fmpub.net +e-adimages.scrippsnetworks.com +e-bannerx.com +e-debtconsolidation.com +e-m.fr +e-n-t-e-r-n-e-x.com +e-planning.net +e.kde.cz +eadexchange.com +eas.almamedia.fi +easyhits4u.com +ebayadvertising.com +ebocornac.com +ebuzzing.com +ecircle-ag.com +eclick.vn +ecoupons.com +edgeio.com +effectivemeasure.com +effectivemeasure.net +eiv.baidu.com +elitedollars.com +elitetoplist.com +emarketer.com +emediate.dk +emediate.eu +emonitor.takeit.cz +engine.awaps.net +engine.espace.netavenir.com +enginenetwork.com +enoratraffic.com +enquisite.com +entercasino.com +entrecard.s3.amazonaws.com +epiccash.com +eqads.com +ero-advertising.com +esellerate.net +estat.com +etahub.com +etargetnet.com +ethicalads.net +etracker.de +eu-adcenter.net +eu1.madsone.com +eur.a1.yimg.com +eurekster.com +euro-linkindex.de +euroclick.com +european-toplist.de +euroranking.de +euros4click.de +eusta.de +evergage.com +evidencecleanergold.com +ewebcounter.com +exchange-it.com +exchange.bg +exchangead.com +exchangeclicksonline.com +exit76.com +exitexchange.com +exitfuel.com +exoclick.com +exogripper.com +experteerads.com +exponential.com +express-submit.de +extractorandburner.com +extreme-dm.com +extremetracking.com +eyeblaster.com +eyereturn.com +eyeviewads.com +eyewonder.com +ezula.com +f5biz.com +fast-adv.it +fastclick.com +fastclick.com.edgesuite.net +fastclick.net +fb-promotions.com +fc.webmasterpro.de +feedbackresearch.com +feedjit.com +ffxcam.fairfax.com.au +fimc.net +fimserve.com +findcommerce.com +findyourcasino.com +fineclicks.com +first.nova.cz +firstlightera.com +flashtalking.com +fleshlightcash.com +flexbanner.com +flowgo.com +flurry.com +fonecta.leiki.com +foo.cosmocode.de +forex-affiliate.net +fpctraffic.com +fpctraffic2.com +fragmentserv.iac-online.de +free-banners.com +freebanner.com +freelogs.com +freeonlineusers.com +freepay.com +freestats.com +freestats.tv +freewebcounter.com +funklicks.com +funpageexchange.com +fusionads.net +fusionquest.com +fxclix.com +fxstyle.net +galaxien.com +game-advertising-online.com +gamehouse.com +gamesites100.net +gamesites200.com +gamesitestop100.com +gator.com +gbanners.hornymatches.com +gemius.pl +geo.digitalpoint.com +geobanner.adultfriendfinder.com +geovisite.com +german-linkindex.de +getclicky.com +globalismedia.com +globaltakeoff.net +globaltrack.com +globe7.com +globus-inter.com +gmads.net +go-clicks.de +go-rank.de +goingplatinum.com +gold.weborama.fr +goldstats.com +google-analytics.com +googleadservices.com +googlesyndication.com +gostats.com +gp.dejanews.com +gpr.hu +grafstat.ro +grapeshot.co.uk +greystripe.com +gtop.ro +gtop100.com +harrenmedia.com +harrenmedianetwork.com +havamedia.net +heias.com +hentaicounter.com +herbalaffiliateprogram.com +hexusads.fluent.ltd.uk +heyos.com +hgads.com +hidden.gogoceleb.com +hightrafficads.com +histats.com +hit-parade.com +hit-ranking.de +hit.bg +hit.ua +hit.webcentre.lycos.co.uk +hitbox.com +hitcents.com +hitexchange.net +hitfarm.com +hitiz.com +hitlist.ru +hitlounge.com +hitometer.com +hits.europuls.eu +hits.informer.com +hits.puls.lv +hits.theguardian.com +hits4me.com +hits4pay.com +hitslink.com +hittail.com +hollandbusinessadvertising.nl +homepageking.de +hostedads.realitykings.com +hotkeys.com +hotlog.ru +hotrank.com.tw +htmlhubing.xyz +httpool.com +hurricanedigitalmedia.com +hydramedia.com +hyperbanner.net +hypertracker.com +i-clicks.net +i.xx.openx.com +i1img.com +i1media.no +ia.iinfo.cz +iad.anm.co.uk +iadnet.com +iasds01.com +iconadserver.com +icptrack.com +idcounter.com +identads.com +idot.cz +idregie.com +idtargeting.com +ientrymail.com +iesnare.com +ifa.tube8live.com +ilbanner.com +ilead.itrack.it +iliillliO00OO0.321.cn +ilovecheating.com +imageads.canoe.ca +imagecash.net +images-pw.secureserver.net +images.v3.com +imarketservices.com +img.prohardver.hu +imgpromo.easyrencontre.com +imitrk.com +imonitor.nethost.cz +imprese.cz +impressionmedia.cz +impressionz.co.uk +imrworldwide.com +inboxdollars.com +incentaclick.com +indexstats.com +indieclick.com +industrybrains.com +inetlog.ru +infinite-ads.com +infinityads.com +infolinks.com +information.com +inringtone.com +insightexpress.com +insightexpressai.com +inspectorclick.com +instantmadness.com +intelliads.com +intellitxt.com +interactive.forthnet.gr +intergi.com +internetfuel.com +interreklame.de +interstat.hu +ip.ro +ip193.cn +iperceptions.com +ipro.com +ireklama.cz +itfarm.com +itop.cz +its-that-easy.com +itsptp.com +jcount.com +jinkads.de +joetec.net +jokedollars.com +js.users.51.la +juicyads.com +jumptap.com +justrelevant.com +justwebads.com +k.iinfo.cz +kanoodle.com +keymedia.hu +kindads.com +kissmetrics.com +kliks.nl +komoona.com +kompasads.com +kontera.com +kt-g.de +ktu.sv2.biz +lakequincy.com +layer-ad.de +layer-ads.de +lbn.ru +lct.salesforce.com +lead-analytics.nl +leadaffiliates.com +leadboltads.net +leadclick.com +leadingedgecash.com +leadzupc.com +leanoisgo.com +levelrate.de +lfstmedia.com +liftdna.com +ligatus.com +ligatus.de +lightningcast.net +lightspeedcash.com +link-booster.de +link4ads.com +linkadd.de +linkbuddies.com +linkexchange.com +linkexchange.ru +linkprice.com +linkrain.com +linkreferral.com +links-ranking.de +linkshighway.com +linkshighway.net +linkstorms.com +linkswaper.com +linktarget.com +liquidad.narrowcastmedia.com +liveintent.com +liverail.com +loading321.com +log.btopenworld.com +logua.com +lop.com +lucidmedia.com +lzjl.com +m.webtrends.com +m1.webstats4u.com +m4n.nl +madclient.uimserv.net +madisonavenue.com +mads.cnet.com +madvertise.de +marchex.com +market-buster.com +marketing.888.com +marketing.hearstmagazines.nl +marketing.nyi.net +marketing.osijek031.com +marketingsolutions.yahoo.com +maroonspider.com +mas.sector.sk +mastermind.com +matchcraft.com +mathtag.com +max.i12.de +maximumcash.com +mbn.com.ua +mbs.megaroticlive.com +mbuyu.nl +mdotm.com +measuremap.com +media-adrunner.mycomputer.com +media-servers.net +media.ftv-publicite.fr +media.funpic.de +media6degrees.com +mediaarea.eu +mediacharger.com +mediadvertising.ro +mediageneral.com +mediamath.com +mediamgr.ugo.com +mediaplazza.com +mediaplex.com +mediascale.de +mediatext.com +mediax.angloinfo.com +mediaz.angloinfo.com +medleyads.com +medyanetads.com +megacash.de +megago.com +megastats.com +megawerbung.de +memorix.sdv.fr +metaffiliation.com +metanetwork.com +methodcash.com +metrics.windowsitpro.com +mgid.com +miarroba.com +microstatic.pl +microticker.com +midnightclicking.com +misstrends.com +mixpanel.com +mixtraffic.com +mlm.de +mmismm.com +mmtro.com +moatads.com +mobclix.com +mocean.mobi +moneyexpert.com +monsterpops.com +mopub.com +mouseflow.com +mpstat.us +mr-rank.de +mrskincash.com +mtree.com +musiccounter.ru +muwmedia.com +myaffiliateprogram.com +mybloglog.com +mycounter.ua +mypagerank.net +mypagerank.ru +mypowermall.com +mystat-in.net +mystat.pl +mytop-in.net +n69.com +naiadsystems.com +naj.sk +namimedia.com +nastydollars.com +navigator.io +navrcholu.cz +nbjmp.com +ndparking.com +nedstat.com +nedstat.nl +nedstatbasic.net +nedstatpro.net +nend.net +neocounter.neoworx-blog-tools.net +neoffic.com +net-filter.com +netaffiliation.com +netagent.cz +netclickstats.com +netcommunities.com +netdirect.nl +netflame.cc +netincap.com +netpool.netbookia.net +netshelter.net +network.business.com +neudesicmediagroup.com +newads.bangbros.com +newbie.com +newnet.qsrch.com +newnudecash.com +newopenx.detik.com +newt1.adultadworld.com +newt1.adultworld.com +newtopsites.com +ng3.ads.warnerbros.com +ngs.impress.co.jp +nitroclicks.com +novem.pl +nuggad.net +numax.nu-1.com +nuseek.com +oas.benchmark.fr +oas.foxnews.com +oas.repubblica.it +oas.roanoke.com +oas.salon.com +oas.toronto.com +oas.uniontrib.com +oas.villagevoice.com +oascentral.businessweek.com +oascentral.chicagobusiness.com +oascentral.fortunecity.com +oascentral.register.com +oewa.at +oewabox.at +offerforge.com +offermatica.com +olivebrandresponse.com +omniture.com +onclasrv.com +onclickads.net +oneandonlynetwork.com +onenetworkdirect.com +onestat.com +onestatfree.com +onewaylinkexchange.net +online-metrix.net +onlinecash.com +onlinecashmethod.com +onlinerewardcenter.com +openad.tf1.fr +openad.travelnow.com +openads.friendfinder.com +openads.org +openclick.com +openx.angelsgroup.org.uk +openx.blindferret.com +opienetwork.com +optimost.com +optmd.com +ordingly.com +ota.cartrawler.com +otto-images.developershed.com +outbrain.com +overture.com +owebmoney.ru +oxado.com +oxcash.com +oxen.hillcountrytexas.com +p.adpdx.com +pagead.l.google.com +pagefair.com +pagerank-estate-spb.ru +pagerank-ranking.com +pagerank-ranking.de +pagerank-server7.de +pagerank-submitter.com +pagerank-submitter.de +pagerank-suchmaschine.de +pagerank-united.de +pagerank4u.eu +pagerank4you.com +pageranktop.com +partage-facile.com +partner-ads.com +partner.pelikan.cz +partner.topcities.com +partnerad.l.google.com +partnercash.de +partners.priceline.com +passion-4.net +pay-ads.com +paycounter.com +paypopup.com +payserve.com +pbnet.ru +pcash.imlive.com +peep-auktion.de +peer39.com +pennyweb.com +pepperjamnetwork.com +percentmobile.com +perf.weborama.fr +perfectaudience.com +perfiliate.com +performancerevenue.com +performancerevenues.com +performancing.com +pgmediaserve.com +pgpartner.com +pheedo.com +phoenix-adrunner.mycomputer.com +phpadsnew.new.natuurpark.nl +phpmyvisites.net +picadmedia.com +pillscash.com +pimproll.com +pixel.adsafeprotected.com +pixel.jumptap.com +planetactive.com +play4traffic.com +playhaven.com +plista.com +plugrush.com +pointroll.com +pop-under.ru +popads.net +popub.com +popunder.ru +popup.msn.com +popupmoney.com +popupnation.com +popups.infostart.com +popuptraffic.com +porngraph.com +porntrack.com +postrelease.com +potenza.cz +pr-star.de +pr-ten.de +pr5dir.com +praddpro.de +prchecker.info +precisioncounter.com +predictad.com +premium-offers.com +primaryads.com +primetime.net +privatecash.com +pro-advertising.com +pro.i-doctor.co.kr +proext.com +profero.com +projectwonderful.com +promo.badoink.com +promo.ulust.com +promo1.webcams.nl +promobenef.com +promos.fling.com +promote.pair.com +promotion-campaigns.com +pronetadvertising.com +propellerads.com +proranktracker.com +proton-tm.com +protraffic.com +provexia.com +prsitecheck.com +psstt.com +pub.chez.com +pub.club-internet.fr +pub.hardware.fr +pub.realmedia.fr +pubdirecte.com +publicidad.elmundo.es +pubmatic.com +pubs.lemonde.fr +pulse360.com +q.azcentral.com +qctop.com +qnsr.com +quantcast.com +quantserve.com +quarterserver.de +questaffiliates.net +quigo.com +quinst.com +quisma.com +rad.msn.com +radar.cedexis.com +radarurl.com +radiate.com +rampidads.com +rank-master.com +rank-master.de +rankchamp.de +ranking-charts.de +ranking-hits.de +ranking-id.de +ranking-links.de +ranking-liste.de +ranking-street.de +rankingchart.de +rankingscout.com +rankyou.com +rapidcounter.com +rate.ru +ratings.lycos.com +rb1.design.ru +re-directme.com +reachjunction.com +reactx.com +readserver.net +realcastmedia.com +realclix.com +realmedia-a800.d4p.net +realtechnetwork.com +realtracker.com +reduxmedia.com +reduxmediagroup.com +reedbusiness.com +reefaquarium.biz +referralware.com +regnow.com +reinvigorate.net +reklam.rfsl.se +reklama.mironet.cz +reklama.reflektor.cz +reklamcsere.hu +reklame.unwired-i.net +reklamer.com.ua +relevanz10.de +relmaxtop.com +remotead.cnet.com +republika.onet.pl +retargeter.com +revenue.net +revenuedirect.com +revsci.net +revstats.com +richmails.com +richmedia.yimg.com +richwebmaster.com +rightstats.com +rlcdn.com +rle.ru +rmads.msn.com +rmedia.boston.com +roar.com +robotreplay.com +roia.biz +rok.com.com +rose.ixbt.com +rotabanner.com +roxr.net +rtbpop.com +rtbpopd.com +ru-traffic.com +ru4.com +rubiconproject.com +s.adroll.com +s2d6.com +sageanalyst.net +sbx.pagesjaunes.fr +scambiobanner.aruba.it +scanscout.com +scopelight.com +scorecardresearch.com +scratch2cash.com +scripte-monster.de +searchfeast.com +searchmarketing.com +searchramp.com +secure.webconnect.net +sedoparking.com +sedotracker.com +seeq.com.invalid +sensismediasmart.com.au +seo4india.com +serv0.com +servedbyadbutler.com +servedbyopenx.com +servethis.com +services.hearstmags.com +serving-sys.com +sexaddpro.de +sexadvertentiesite.nl +sexcounter.com +sexinyourcity.com +sexlist.com +sextracker.com +sexystat.com +sezwho.com +shareadspace.com +shareasale.com +sharepointads.com +sher.index.hu +shinystat.com +shinystat.it +shoppingads.com +siccash.com +sidebar.angelfire.com +sinoa.com +sitebrand.geeks.com +sitemerkezi.net +sitemeter.com +sitestat.com +sixsigmatraffic.com +skylink.vn +slickaffiliate.com +slopeaota.com +sma.punto.net +smart4ads.com +smartadserver.com +smartbase.cdnservices.com +smowtion.com +snapads.com +snoobi.com +socialspark.com +softclick.com.br +spacash.com +sparkstudios.com +specificmedia.co.uk +specificpop.com +spezialreporte.de +spinbox.techtracker.com +spinbox.versiontracker.com +sponsorads.de +sponsorpro.de +sponsors.thoughtsmedia.com +spot.fitness.com +spotxchange.com +sprinks-clicks.about.com +spylog.com +spywarelabs.com +spywarenuker.com +spywords.com +srbijacafe.org +srwww1.com +starffa.com +start.freeze.com +stat.cliche.se +stat.dealtime.com +stat.dyna.ultraweb.hu +stat.pl +stat.su +stat.tudou.com +stat.webmedia.pl +stat.zenon.net +stat24.com +stat24.meta.ua +statcounter.com +static.fmpub.net +static.itrack.it +staticads.btopenworld.com +statistik-gallup.net +statm.the-adult-company.com +stats.blogger.com +stats.cts-bv.nl +stats.directnic.com +stats.hyperinzerce.cz +stats.mirrorfootball.co.uk +stats.olark.com +stats.suite101.com +stats.surfaid.ihost.com +stats.townnews.com +stats.unwired-i.net +stats.wordpress.com +stats.x14.eu +stats4all.com +statsie.com +statxpress.com +steelhouse.com +steelhousemedia.com +stickyadstv.com +suavalds.com +subscribe.hearstmags.com +sugoicounter.com +superclix.de +superstats.com +supertop.ru +supertop100.com +suptullog.com +surfmusik-adserver.de +swissadsolutions.com +swordfishdc.com +sx.trhnt.com +t.insigit.com +t.pusk.ru +taboola.com +tacoda.net +tagular.com +tailsweep.co.uk +tailsweep.com +tailsweep.se +takru.com +tangerinenet.biz +tapad.com +targad.de +targetingnow.com +targetnet.com +targetpoint.com +tatsumi-sys.jp +tcads.net +techclicks.net +teenrevenue.com +teliad.de +text-link-ads.com +textad.sexsearch.com +textads.biz +textads.opera.com +textlinks.com +tfag.de +theadhost.com +theads.me +thebugs.ws +thecounter.com +therapistla.com +therichkids.com +thrnt.com +thruport.com +tinybar.com +tizers.net +tlvmedia.com +tntclix.co.uk +top-casting-termine.de +top-site-list.com +top.list.ru +top.mail.ru +top.proext.com +top100-images.rambler.ru +top100.mafia.ru +top123.ro +top20.com +top20free.com +top90.ro +topbarh.box.sk +topblogarea.se +topbucks.com +topforall.com +topgamesites.net +toplist.cz +toplist.pornhost.com +toplista.mw.hu +toplistcity.com +topmmorpgsites.com +topping.com.ua +toprebates.com +topsafelist.net +topsearcher.com +topsir.com +topsite.lv +topsites.com.br +topstats.com +totemcash.com +touchclarity.com +touchclarity.natwest.com +tour.brazzers.com +tpnads.com +track.adform.net +track.anchorfree.com +track.gawker.com +trackalyzer.com +tracker.icerocket.com +tracker.marinsm.com +tracking.crunchiemedia.com +tracking.gajmp.com +tracking.internetstores.de +tracking.yourfilehost.com +tracking101.com +trackingsoft.com +trackmysales.com +tradeadexchange.com +tradedoubler.com +traffic-exchange.com +traffic.liveuniversenetwork.com +trafficadept.com +trafficcdn.liveuniversenetwork.com +trafficfactory.biz +trafficholder.com +traffichunt.com +trafficjunky.net +trafficleader.com +trafficsecrets.com +trafficspaces.net +trafficstrategies.com +trafficswarm.com +traffictrader.net +trafficz.com +trafficz.net +traffiq.com +trafic.ro +travis.bosscasinos.com +trekblue.com +trekdata.com +trendcounter.com +trhunt.com +tribalfusion.com +trix.net +truehits.net +truehits1.gits.net.th +truehits2.gits.net.th +tsms-ad.tsms.com +tubedspots.com +tubemogul.com +turn.com +tvas-a.pw +tvas-c.pw +tvmtracker.com +twittad.com +tyroo.com +uarating.com +ukbanners.com +ultramercial.com +ultsearch.com +unanimis.co.uk +untd.com +updated.com +urlcash.net +us.a1.yimg.com +usapromotravel.com +usmsad.tom.com +utarget.co.uk +utils.mediageneral.net +v1.cnzz.com +validclick.com +valuead.com +valueclick.com +valueclickmedia.com +valuecommerce.com +valuesponsor.com +veille-referencement.com +ventivmedia.com +vericlick.com +vertadnet.com +veruta.com +vervewireless.com +vibrantmedia.com +video-stats.video.google.com +videoegg.com +view4cash.de +viewpoint.com +visistat.com +visit.webhosting.yahoo.com +visitbox.de +visual-pagerank.fr +visualrevenue.com +voicefive.com +vpon.com +vrs.cz +vs.tucows.com +vungle.com +wads.webteh.com +warlog.info +warlog.ru +wdads.sx.atl.publicus.com +web-stat.com +web.informer.com +web2.deja.com +webads.co.nz +webads.nl +webangel.ru +webcash.nl +webcounter.cz +webcounter.goweb.de +webgains.com +webmaster-partnerprogramme24.de +webmasterplan.com +webmasterplan.de +weborama.fr +webpower.com +webreseau.com +webseoanalytics.com +websponsors.com +webstat.channel4.com +webstat.com +webstat.net +webstats4u.com +webtrackerplus.com +webtraffic.se +webtraxx.de +webtrendslive.com +wegcash.com +werbung.meteoxpress.com +wetrack.it +whaleads.com +whenu.com +whispa.com +whoisonline.net +wholesaletraffic.info +widespace.com +widgetbucks.com +wikia-ads.wikia.com +window.nixnet.cz +wintricksbanner.googlepages.com +witch-counter.de +wlmarketing.com +wmirk.ru +wonderlandads.com +wondoads.de +woopra.com +worldwide-cash.net +wtlive.com +www-banner.chat.ru +www-google-analytics.l.google.com +www.banner-link.com.br +www.dnps.com +www.kaplanindex.com +www.money4exit.de +www.photo-ads.co.uk +www1.gto-media.com +www8.glam.com +x-traceur.com +x6.yakiuchi.com +xchange.ro +xclicks.net +xertive.com +xg4ken.com +xiti.com +xplusone.com +xponsor.com +xq1.net +xrea.com +xtendmedia.com +xtremetop100.com +xxxcounter.com +xxxmyself.com +y.ibsys.com +yab-adimages.s3.amazonaws.com +yabuka.com +yadro.ru +yesads.com +yesadvertising.com +yieldads.com +yieldlab.net +yieldmanager.com +yieldmanager.net +yieldtraffic.com +yoc.mobi +yoggrt.com +z5x.net +zangocash.com +zanox-affiliate.de +zanox.com +zantracker.com +zedo.com +zencudo.co.uk +zenkreka.com +zenzuu.com +zeus.developershed.com +zeusclicks.com +zintext.com +zmedia.com \ No newline at end of file diff --git a/app/src/web/assets/typings/frost.d.ts b/app/src/web/assets/typings/frost.d.ts new file mode 100644 index 00000000..a3591f66 --- /dev/null +++ b/app/src/web/assets/typings/frost.d.ts @@ -0,0 +1,27 @@ +declare interface FrostJSI { + loadUrl(url: string | null): boolean + + loadVideo(url: string | null, isGif: boolean): boolean + + reloadBaseUrl(animate: boolean) + + contextMenu(url: string, text: string | null) + + longClick(start: boolean) + + disableSwipeRefresh(disable: boolean) + + loadLogin() + + loadImage(imageUrl: string, text: string | null) + + emit(flag: number) + + isReady() + + handleHtml(html: string | null) + + handleHeader(html: string | null) +} + +declare var Frost: FrostJSI; diff --git a/app/src/web/package.json b/app/src/web/package.json new file mode 100644 index 00000000..c80696b3 --- /dev/null +++ b/app/src/web/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "typescript": "^3.3.1" + } +} diff --git a/app/src/web/tsconfig.json b/app/src/web/tsconfig.json new file mode 100644 index 00000000..711fdcbb --- /dev/null +++ b/app/src/web/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es3", + "allowJs": true, + "skipLibCheck": true, +// "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", +// "resolveJsonModule": true, + "isolatedModules": false, +// "noEmit": true, + // Extras + "strictNullChecks": true, + "noImplicitAny": true, + "allowUnreachableCode": true, + "allowUnusedLabels": true + }, + "include": [ + "assets/js", "assets/typings" + ] +} -- cgit v1.2.3 From 87469aba96cee61b4252d9a6d023324598355244 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Tue, 5 Feb 2019 22:40:24 -0500 Subject: Strip images and update context handler --- app/src/main/res/xml/frost_changelog.xml | 4 +- app/src/web/assets/js/click_a.js | 9 --- app/src/web/assets/js/click_debugger.js | 2 - app/src/web/assets/js/context_a.js | 100 ++++++++++++++------------ app/src/web/assets/js/context_a.ts | 108 +++++++++++++++++++---------- app/src/web/assets/js/document_watcher.js | 1 - app/src/web/assets/js/header_badges.js | 1 - app/src/web/assets/js/media.js | 2 - app/src/web/assets/js/menu.js | 2 - app/src/web/assets/js/notif_msg.js | 1 - app/src/web/assets/js/textarea_listener.js | 8 --- app/src/web/tsconfig.json | 3 +- 12 files changed, 133 insertions(+), 108 deletions(-) (limited to 'app/src/web') diff --git a/app/src/main/res/xml/frost_changelog.xml b/app/src/main/res/xml/frost_changelog.xml index f90ecf37..ed014604 100644 --- a/app/src/main/res/xml/frost_changelog.xml +++ b/app/src/main/res/xml/frost_changelog.xml @@ -8,8 +8,8 @@ - - + + diff --git a/app/src/web/assets/js/click_a.js b/app/src/web/assets/js/click_a.js index 7faafc15..be69bb8c 100644 --- a/app/src/web/assets/js/click_a.js +++ b/app/src/web/assets/js/click_a.js @@ -2,14 +2,12 @@ (function () { var prevented = false; var _frostAClick = function (e) { - // check for valid target var target = e.target || e.currentTarget || e.srcElement; if (!(target instanceof Element)) { console.log("No element found"); return; } var element = target; - // Notifications are two layers under for (var i = 0; i < 2; i++) { if (element.tagName !== 'A') { element = element.parentElement; @@ -22,7 +20,6 @@ return; } console.log("Click intercept " + url); - // If Frost is injected, check if loading the url through an overlay works if (Frost.loadUrl(url)) { e.stopPropagation(); e.preventDefault(); @@ -33,12 +30,6 @@ } } }; - /* - * On top of the click event, we must stop it for long presses - * Since that will conflict with the context menu - * Note that we only override it on conditions where the context menu - * Will occur - */ var _frostPreventClick = function () { console.log("Click _frostPrevented"); prevented = true; diff --git a/app/src/web/assets/js/click_debugger.js b/app/src/web/assets/js/click_debugger.js index aab4572d..16729899 100644 --- a/app/src/web/assets/js/click_debugger.js +++ b/app/src/web/assets/js/click_debugger.js @@ -1,8 +1,6 @@ "use strict"; -// For desktop only (function () { var _frostAContext = function (e) { - // Commonality; check for valid target var element = e.target || e.currentTarget || e.srcElement; if (!(element instanceof Element)) { console.log("No element found"); diff --git a/app/src/web/assets/js/context_a.js b/app/src/web/assets/js/context_a.js index 7e636cea..0573a17a 100644 --- a/app/src/web/assets/js/context_a.js +++ b/app/src/web/assets/js/context_a.js @@ -1,61 +1,75 @@ "use strict"; -/** - * Context menu for links - * Largely mimics click_a.js - */ (function () { var longClick = false; + var _frostCopyPost = function (e, target) { + if (target.tagName != 'A') { + return false; + } + var parent1 = target.parentElement; + if (!parent1 || parent1.tagName != 'DIV') { + return false; + } + var parent2 = parent1.parentElement; + if (!parent2 || !parent2.classList.contains('story_body_container')) { + return false; + } + var url = target.getAttribute('href'); + var text = parent1.innerText; + Frost.contextMenu(url, text); + return true; + }; + var _frostImage = function (e, target) { + var element = target; + for (var i = 0; i < 2; i++) { + if (element.tagName != 'A') { + element = element.parentElement; + } + } + if (element.tagName != 'A') { + return false; + } + var url = element.getAttribute('href'); + if (!url || url == '#') { + return false; + } + var text = element.parentElement.innerText; + var image = element.querySelector("[style*=\"background-image: url(\"]"); + if (!image) { + image = element.parentElement.querySelector("[style*=\"background-image: url(\"]"); + } + if (image) { + var imageUrl = window.getComputedStyle(image, null).backgroundImage.trim().slice(4, -1); + console.log("Context image: " + imageUrl); + Frost.loadImage(imageUrl, text); + return true; + } + var img = element.querySelector("img[src*=scontent]"); + if (img instanceof HTMLMediaElement) { + var imgUrl = img.src; + console.log("Context img: " + imgUrl); + Frost.loadImage(imgUrl, text); + return true; + } + console.log("Context content " + url + " " + text); + Frost.contextMenu(url, text); + return true; + }; + var handlers = [_frostCopyPost, _frostImage]; var _frostAContext = function (e) { Frost.longClick(true); longClick = true; - /* - * Commonality; check for valid target - */ var target = e.target || e.currentTarget || e.srcElement; if (!(target instanceof Element)) { console.log("No element found"); return; } - var element = target; - // Notifications are two layers under - for (var i = 0; i < 2; i++) { - if (element.tagName != 'A') { - element = element.parentElement; - } - } - if (element.tagName == 'A') { - var url = element.getAttribute('href'); - if (!url || url == '#') { - return; - } - var text = element.parentElement.innerText; - // Check if image item exists, first in children and then in parent - var image = element.querySelector("[style*=\"background-image: url(\"]"); - if (!image) { - image = element.parentElement.querySelector("[style*=\"background-image: url(\"]"); - } - if (image) { - var imageUrl = window.getComputedStyle(image, null).backgroundImage.trim().slice(4, -1); - console.log("Context image: " + imageUrl); - Frost.loadImage(imageUrl, text); - e.stopPropagation(); - e.preventDefault(); - return; - } - // Check if true img exists - var img = element.querySelector("img[src*=scontent]"); - if (img instanceof HTMLMediaElement) { - var imgUrl = img.src; - console.log("Context img: " + imgUrl); - Frost.loadImage(imgUrl, text); + for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) { + var h = handlers_1[_i]; + if (h(e, target)) { e.stopPropagation(); e.preventDefault(); return; } - console.log("Context content " + url + " " + text); - Frost.contextMenu(url, text); - e.stopPropagation(); - e.preventDefault(); } }; document.addEventListener('contextmenu', _frostAContext, true); diff --git a/app/src/web/assets/js/context_a.ts b/app/src/web/assets/js/context_a.ts index 16ed33a9..06d2f4a2 100644 --- a/app/src/web/assets/js/context_a.ts +++ b/app/src/web/assets/js/context_a.ts @@ -2,8 +2,78 @@ * Context menu for links * Largely mimics click_a.js */ + (function () { let longClick = false; + + /** + * Given event and target, return true if handled and false otherwise. + */ + type EventHandler = (e: Event, target: Element) => Boolean + + /** + * Posts should click a tag, with two parents up being div.story_body_container + */ + const _frostCopyPost: EventHandler = (e, target) => { + if (target.tagName != 'A') { + return false; + } + const parent1 = target.parentElement; + if (!parent1 || parent1.tagName != 'DIV') { + return false; + } + const parent2 = parent1.parentElement; + if (!parent2 || !parent2.classList.contains('story_body_container')) { + return false; + } + const url = target.getAttribute('href')!; + const text = parent1.innerText; + Frost.contextMenu(url, text); + return true; + }; + + const _frostImage: EventHandler = (e, target) => { + let element: Element = target; + // Notifications are two layers under + for (let i = 0; i < 2; i++) { + if (element.tagName != 'A') { + element = element.parentElement; + } + } + if (element.tagName != 'A') { + return false + } + const url = element.getAttribute('href'); + if (!url || url == '#') { + return false + } + const text = (element.parentElement).innerText; + // Check if image item exists, first in children and then in parent + let image = element.querySelector("[style*=\"background-image: url(\"]"); + if (!image) { + image = (element.parentElement).querySelector("[style*=\"background-image: url(\"]") + } + if (image) { + const imageUrl = (window.getComputedStyle(image, null).backgroundImage).trim().slice(4, -1); + console.log(`Context image: ${imageUrl}`); + Frost.loadImage(imageUrl, text); + return true + } + // Check if true img exists + const img = element.querySelector("img[src*=scontent]"); + if (img instanceof HTMLMediaElement) { + const imgUrl = img.src; + console.log(`Context img: ${imgUrl}`); + Frost.loadImage(imgUrl, text); + return true + } + console.log(`Context content ${url} ${text}`); + Frost.contextMenu(url, text); + return true + }; + + const handlers = [_frostCopyPost, _frostImage]; + const _frostAContext = (e: Event) => { Frost.longClick(true); longClick = true; @@ -16,46 +86,12 @@ console.log("No element found"); return } - let element: Element = target; - // Notifications are two layers under - for (let i = 0; i < 2; i++) { - if (element.tagName != 'A') { - element = element.parentElement; - } - } - if (element.tagName == 'A') { - const url = element.getAttribute('href'); - if (!url || url == '#') { - return - } - const text = (element.parentElement).innerText; - // Check if image item exists, first in children and then in parent - let image = element.querySelector("[style*=\"background-image: url(\"]"); - if (!image) { - image = (element.parentElement).querySelector("[style*=\"background-image: url(\"]") - } - if (image) { - const imageUrl = (window.getComputedStyle(image, null).backgroundImage).trim().slice(4, -1); - console.log(`Context image: ${imageUrl}`); - Frost.loadImage(imageUrl, text); - e.stopPropagation(); - e.preventDefault(); - return - } - // Check if true img exists - const img = element.querySelector("img[src*=scontent]"); - if (img instanceof HTMLMediaElement) { - const imgUrl = img.src; - console.log(`Context img: ${imgUrl}`); - Frost.loadImage(imgUrl, text); + for (const h of handlers) { + if (h(e, target)) { e.stopPropagation(); e.preventDefault(); return } - console.log(`Context content ${url} ${text}`); - Frost.contextMenu(url, text); - e.stopPropagation(); - e.preventDefault(); } }; diff --git a/app/src/web/assets/js/document_watcher.js b/app/src/web/assets/js/document_watcher.js index f3c4ab25..12252201 100644 --- a/app/src/web/assets/js/document_watcher.js +++ b/app/src/web/assets/js/document_watcher.js @@ -1,5 +1,4 @@ "use strict"; -// Emit key once half the viewport is covered (function () { var isReady = function () { return document.body.scrollHeight > innerHeight + 100; diff --git a/app/src/web/assets/js/header_badges.js b/app/src/web/assets/js/header_badges.js index daaf540a..b1ceee05 100644 --- a/app/src/web/assets/js/header_badges.js +++ b/app/src/web/assets/js/header_badges.js @@ -1,5 +1,4 @@ "use strict"; -// Fetches the header contents if it exists (function () { var header = document.getElementById('mJewelNav'); if (header) { diff --git a/app/src/web/assets/js/media.js b/app/src/web/assets/js/media.js index 571168d6..baeba0a1 100644 --- a/app/src/web/assets/js/media.js +++ b/app/src/web/assets/js/media.js @@ -1,5 +1,4 @@ "use strict"; -// Handles media events (function () { var _frostMediaClick = function (e) { var target = e.target || e.srcElement; @@ -30,7 +29,6 @@ return; } var url = dataStore.src; - // !startsWith; see https://stackoverflow.com/a/36876507/4407321 if (!url || url.lastIndexOf('http', 0) !== 0) { return; } diff --git a/app/src/web/assets/js/menu.js b/app/src/web/assets/js/menu.js index c30e93cf..b6a30209 100644 --- a/app/src/web/assets/js/menu.js +++ b/app/src/web/assets/js/menu.js @@ -1,5 +1,4 @@ "use strict"; -// Click menu and move contents to main view (function () { var viewport = document.querySelector("#viewport"); var root = document.querySelector("#root"); @@ -35,7 +34,6 @@ if (menu) { x.disconnect(); console.log("Found side menu"); - // Transfer elements while (root.firstChild) { root.removeChild(root.firstChild); } diff --git a/app/src/web/assets/js/notif_msg.js b/app/src/web/assets/js/notif_msg.js index 20a89e88..bcff697b 100644 --- a/app/src/web/assets/js/notif_msg.js +++ b/app/src/web/assets/js/notif_msg.js @@ -1,5 +1,4 @@ "use strict"; -// Binds callback to an invisible webview to take in the search events (function () { var finished = false; var x = new MutationObserver(function () { diff --git a/app/src/web/assets/js/textarea_listener.js b/app/src/web/assets/js/textarea_listener.js index 9a8783c1..02336382 100644 --- a/app/src/web/assets/js/textarea_listener.js +++ b/app/src/web/assets/js/textarea_listener.js @@ -1,12 +1,4 @@ "use strict"; -/* - * focus listener for textareas - * since swipe to refresh is quite sensitive, we will disable it - * when we detect a user typing - * note that this extends passed having a keyboard opened, - * as a user may still be reviewing his/her post - * swiping should automatically be reset on refresh - */ (function () { var _frostFocus = function (e) { var element = e.target || e.srcElement; diff --git a/app/src/web/tsconfig.json b/app/src/web/tsconfig.json index 711fdcbb..ea88e28e 100644 --- a/app/src/web/tsconfig.json +++ b/app/src/web/tsconfig.json @@ -16,7 +16,8 @@ "strictNullChecks": true, "noImplicitAny": true, "allowUnreachableCode": true, - "allowUnusedLabels": true + "allowUnusedLabels": true, + "removeComments": true }, "include": [ "assets/js", "assets/typings" -- cgit v1.2.3 From 8b850711ceb7c38f9368ce840831c1c0bdb4ba74 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Tue, 5 Feb 2019 22:44:47 -0500 Subject: Add log and strict equality --- app/src/web/assets/js/context_a.js | 11 ++++++----- app/src/web/assets/js/context_a.ts | 11 ++++++----- app/src/web/assets/js/textarea_listener.js | 2 +- app/src/web/assets/js/textarea_listener.ts | 2 +- 4 files changed, 14 insertions(+), 12 deletions(-) (limited to 'app/src/web') diff --git a/app/src/web/assets/js/context_a.js b/app/src/web/assets/js/context_a.js index 0573a17a..d0f5c622 100644 --- a/app/src/web/assets/js/context_a.js +++ b/app/src/web/assets/js/context_a.js @@ -2,11 +2,11 @@ (function () { var longClick = false; var _frostCopyPost = function (e, target) { - if (target.tagName != 'A') { + if (target.tagName !== 'A') { return false; } var parent1 = target.parentElement; - if (!parent1 || parent1.tagName != 'DIV') { + if (!parent1 || parent1.tagName !== 'DIV') { return false; } var parent2 = parent1.parentElement; @@ -15,21 +15,22 @@ } var url = target.getAttribute('href'); var text = parent1.innerText; + console.log("Copy post " + url + " " + text); Frost.contextMenu(url, text); return true; }; var _frostImage = function (e, target) { var element = target; for (var i = 0; i < 2; i++) { - if (element.tagName != 'A') { + if (element.tagName !== 'A') { element = element.parentElement; } } - if (element.tagName != 'A') { + if (element.tagName !== 'A') { return false; } var url = element.getAttribute('href'); - if (!url || url == '#') { + if (!url || url === '#') { return false; } var text = element.parentElement.innerText; diff --git a/app/src/web/assets/js/context_a.ts b/app/src/web/assets/js/context_a.ts index 06d2f4a2..2a079f39 100644 --- a/app/src/web/assets/js/context_a.ts +++ b/app/src/web/assets/js/context_a.ts @@ -15,11 +15,11 @@ * Posts should click a tag, with two parents up being div.story_body_container */ const _frostCopyPost: EventHandler = (e, target) => { - if (target.tagName != 'A') { + if (target.tagName !== 'A') { return false; } const parent1 = target.parentElement; - if (!parent1 || parent1.tagName != 'DIV') { + if (!parent1 || parent1.tagName !== 'DIV') { return false; } const parent2 = parent1.parentElement; @@ -28,6 +28,7 @@ } const url = target.getAttribute('href')!; const text = parent1.innerText; + console.log(`Copy post ${url} ${text}`); Frost.contextMenu(url, text); return true; }; @@ -36,15 +37,15 @@ let element: Element = target; // Notifications are two layers under for (let i = 0; i < 2; i++) { - if (element.tagName != 'A') { + if (element.tagName !== 'A') { element = element.parentElement; } } - if (element.tagName != 'A') { + if (element.tagName !== 'A') { return false } const url = element.getAttribute('href'); - if (!url || url == '#') { + if (!url || url === '#') { return false } const text = (element.parentElement).innerText; diff --git a/app/src/web/assets/js/textarea_listener.js b/app/src/web/assets/js/textarea_listener.js index 02336382..1ec9b663 100644 --- a/app/src/web/assets/js/textarea_listener.js +++ b/app/src/web/assets/js/textarea_listener.js @@ -6,7 +6,7 @@ return; } console.log("FrostJSI focus, " + element.tagName); - if (element.tagName == 'TEXTAREA') { + if (element.tagName === 'TEXTAREA') { Frost.disableSwipeRefresh(true); } }; diff --git a/app/src/web/assets/js/textarea_listener.ts b/app/src/web/assets/js/textarea_listener.ts index 9d5fd388..062f5bf6 100644 --- a/app/src/web/assets/js/textarea_listener.ts +++ b/app/src/web/assets/js/textarea_listener.ts @@ -13,7 +13,7 @@ return } console.log(`FrostJSI focus, ${element.tagName}`); - if (element.tagName == 'TEXTAREA') { + if (element.tagName === 'TEXTAREA') { Frost.disableSwipeRefresh(true); } }; -- cgit v1.2.3 From ddfc310fde5f50ba52ef930287449c2e08faaca8 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Tue, 5 Feb 2019 23:02:50 -0500 Subject: Add ability to copy comments, resolves #454 --- .../com/pitchedapps/frost/utils/WebContextMenu.kt | 44 ++++++++++++---------- .../kotlin/com/pitchedapps/frost/web/FrostJSI.kt | 5 +-- app/src/web/assets/js/context_a.js | 13 ++++++- app/src/web/assets/js/context_a.ts | 28 +++++++++----- app/src/web/assets/typings/frost.d.ts | 2 +- docs/Changelog.md | 2 + 6 files changed, 59 insertions(+), 35 deletions(-) (limited to 'app/src/web') diff --git a/app/src/main/kotlin/com/pitchedapps/frost/utils/WebContextMenu.kt b/app/src/main/kotlin/com/pitchedapps/frost/utils/WebContextMenu.kt index 62330e4d..fbaa4574 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/utils/WebContextMenu.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/utils/WebContextMenu.kt @@ -20,7 +20,6 @@ import android.content.Context import ca.allanwang.kau.utils.copyToClipboard import ca.allanwang.kau.utils.shareText import ca.allanwang.kau.utils.string -import ca.allanwang.kau.utils.toast import com.pitchedapps.frost.R import com.pitchedapps.frost.activities.MainActivity import com.pitchedapps.frost.facebook.formattedFbUrl @@ -29,19 +28,19 @@ import com.pitchedapps.frost.facebook.formattedFbUrl * Created by Allan Wang on 2017-07-07. */ fun Context.showWebContextMenu(wc: WebContext) { - - var title = wc.url + if (wc.isEmpty) return + var title = wc.url ?: string(R.string.menu) title = title.substring(title.indexOf("m/") + 1) //just so if defaults to 0 in case it's not .com/ if (title.length > 100) title = title.substring(0, 100) + '\u2026' + val menuItems = WebContextType.values + .filter { it.constraint(wc) } + materialDialogThemed { title(title) - items(WebContextType.values.map { - if (it == WebContextType.COPY_TEXT && wc.text == null) return@map null - this@showWebContextMenu.string(it.textId) - }.filterNotNull()) + items(menuItems.map { string(it.textId) }) itemsCallback { _, _, position, _ -> - WebContextType[position].onClick(this@showWebContextMenu, wc) + menuItems[position].onClick(this@showWebContextMenu, wc) } dismissListener { //showing the dialog interrupts the touch down event, so we must ensure that the viewpager's swipe is enabled @@ -50,18 +49,23 @@ fun Context.showWebContextMenu(wc: WebContext) { } } -class WebContext(val unformattedUrl: String, val text: String?) { - val url = unformattedUrl.formattedFbUrl +class WebContext(val unformattedUrl: String?, val text: String?) { + val url: String? = unformattedUrl?.formattedFbUrl + inline val hasUrl get() = unformattedUrl != null + inline val hasText get() = text != null + inline val isEmpty get() = !hasUrl && !hasText } -enum class WebContextType(val textId: Int, val onClick: (c: Context, wc: WebContext) -> Unit) { - OPEN_LINK(R.string.open_link, { c, wc -> c.launchWebOverlay(wc.unformattedUrl) }), - COPY_LINK(R.string.copy_link, { c, wc -> c.copyToClipboard(wc.url) }), - COPY_TEXT( - R.string.copy_text, - { c, wc -> if (wc.text != null) c.copyToClipboard(wc.text) else c.toast(R.string.no_text) }), - SHARE_LINK(R.string.share_link, { c, wc -> c.shareText(wc.url) }), - DEBUG_LINK(R.string.debug_link, { c, wc -> +enum class WebContextType( + val textId: Int, + val constraint: (wc: WebContext) -> Boolean, + val onClick: (c: Context, wc: WebContext) -> Unit +) { + OPEN_LINK(R.string.open_link, { it.hasUrl }, { c, wc -> c.launchWebOverlay(wc.unformattedUrl!!) }), + COPY_LINK(R.string.copy_link, { it.hasUrl }, { c, wc -> c.copyToClipboard(wc.url) }), + COPY_TEXT(R.string.copy_text, { it.hasText }, { c, wc -> c.copyToClipboard(wc.text) }), + SHARE_LINK(R.string.share_link, { it.hasUrl }, { c, wc -> c.shareText(wc.url) }), + DEBUG_LINK(R.string.debug_link, { it.hasUrl }, { c, wc -> c.materialDialogThemed { title(R.string.debug_link) content(R.string.debug_link_desc) @@ -69,8 +73,8 @@ enum class WebContextType(val textId: Int, val onClick: (c: Context, wc: WebCont onPositive { _, _ -> c.sendFrostEmail(R.string.debug_link_subject) { message = c.string(R.string.debug_link_content) - addItem("Unformatted url", wc.unformattedUrl) - addItem("Formatted url", wc.url) + addItem("Unformatted url", wc.unformattedUrl!!) + addItem("Formatted url", wc.url!!) } } } diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt index 19d16e87..50a5e2e1 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostJSI.kt @@ -76,10 +76,9 @@ class FrostJSI(val web: FrostWebView) { } @JavascriptInterface - fun contextMenu(url: String, text: String?) { - if (!text.isIndependent) return + fun contextMenu(url: String?, text: String?) { //url will be formatted through webcontext - web.post { context.showWebContextMenu(WebContext(url, text)) } + web.post { context.showWebContextMenu(WebContext(url.takeIf { it.isIndependent }, text)) } } /** diff --git a/app/src/web/assets/js/context_a.js b/app/src/web/assets/js/context_a.js index d0f5c622..410553bd 100644 --- a/app/src/web/assets/js/context_a.js +++ b/app/src/web/assets/js/context_a.js @@ -1,6 +1,15 @@ "use strict"; (function () { var longClick = false; + var _frostCopyComment = function (e, target) { + if (!target.hasAttribute('data-commentid')) { + return false; + } + var text = target.innerText; + console.log("Copy comment " + text); + Frost.contextMenu(null, text); + return true; + }; var _frostCopyPost = function (e, target) { if (target.tagName !== 'A') { return false; @@ -55,12 +64,12 @@ Frost.contextMenu(url, text); return true; }; - var handlers = [_frostCopyPost, _frostImage]; + var handlers = [_frostCopyComment, _frostCopyPost, _frostImage]; var _frostAContext = function (e) { Frost.longClick(true); longClick = true; var target = e.target || e.currentTarget || e.srcElement; - if (!(target instanceof Element)) { + if (!(target instanceof HTMLElement)) { console.log("No element found"); return; } diff --git a/app/src/web/assets/js/context_a.ts b/app/src/web/assets/js/context_a.ts index 2a079f39..4751bbdc 100644 --- a/app/src/web/assets/js/context_a.ts +++ b/app/src/web/assets/js/context_a.ts @@ -9,7 +9,17 @@ /** * Given event and target, return true if handled and false otherwise. */ - type EventHandler = (e: Event, target: Element) => Boolean + type EventHandler = (e: Event, target: HTMLElement) => Boolean + + const _frostCopyComment: EventHandler = (e, target) => { + if (!target.hasAttribute('data-commentid')) { + return false; + } + const text = target.innerText; + console.log(`Copy comment ${text}`); + Frost.contextMenu(null, text); + return true; + }; /** * Posts should click a tag, with two parents up being div.story_body_container @@ -26,7 +36,7 @@ if (!parent2 || !parent2.classList.contains('story_body_container')) { return false; } - const url = target.getAttribute('href')!; + const url = target.getAttribute('href'); const text = parent1.innerText; console.log(`Copy post ${url} ${text}`); Frost.contextMenu(url, text); @@ -42,11 +52,11 @@ } } if (element.tagName !== 'A') { - return false + return false; } const url = element.getAttribute('href'); if (!url || url === '#') { - return false + return false; } const text = (element.parentElement).innerText; // Check if image item exists, first in children and then in parent @@ -58,7 +68,7 @@ const imageUrl = (window.getComputedStyle(image, null).backgroundImage).trim().slice(4, -1); console.log(`Context image: ${imageUrl}`); Frost.loadImage(imageUrl, text); - return true + return true; } // Check if true img exists const img = element.querySelector("img[src*=scontent]"); @@ -66,14 +76,14 @@ const imgUrl = img.src; console.log(`Context img: ${imgUrl}`); Frost.loadImage(imgUrl, text); - return true + return true; } console.log(`Context content ${url} ${text}`); Frost.contextMenu(url, text); - return true + return true; }; - const handlers = [_frostCopyPost, _frostImage]; + const handlers = [_frostCopyComment, _frostCopyPost, _frostImage]; const _frostAContext = (e: Event) => { Frost.longClick(true); @@ -83,7 +93,7 @@ * Commonality; check for valid target */ const target = e.target || e.currentTarget || e.srcElement; - if (!(target instanceof Element)) { + if (!(target instanceof HTMLElement)) { console.log("No element found"); return } diff --git a/app/src/web/assets/typings/frost.d.ts b/app/src/web/assets/typings/frost.d.ts index a3591f66..8f60c9dd 100644 --- a/app/src/web/assets/typings/frost.d.ts +++ b/app/src/web/assets/typings/frost.d.ts @@ -5,7 +5,7 @@ declare interface FrostJSI { reloadBaseUrl(animate: boolean) - contextMenu(url: string, text: string | null) + contextMenu(url: string | null, text: string | null) longClick(start: boolean) diff --git a/docs/Changelog.md b/docs/Changelog.md index abf15cd9..09345c5e 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -2,6 +2,8 @@ ## v2.2.2 * New marketplace shortcut +* Fix crash when internet disconnects (may still need app restart) +* Improve JS code ## v2.2.1 * Update theme -- cgit v1.2.3