From bb911ee18796b66678818027600b2b8286976e13 Mon Sep 17 00:00:00 2001 From: Jason Haas Date: Sat, 27 Oct 2018 12:30:34 -0500 Subject: [PATCH] Kudos v1 (#2492) * Don't show unclonable Kudos in marketplace * Add new kudos * Don't restrict kudos minting at all * Updates to handle the latest Kudos contract changes See https://github.com/mbeacom/gitcoin-erc721/pull/162 * Fix IPFS CORs problem again * Update how rarity gets set * kudos.yaml now has tags as an array of strings * Add new kudos images * update rinkeby address for abi.js * new rinkeby contract address * update crontab * Fix Kudos name not showing up on receive page * fix js bug in kudos_send * prompts * kudos levitation demo * refactor * kudos goodies * Add kudos email preview * change logo * change detail kudos styles * change var kudos * Partials are fun * no more levitate * Kudos asset updates from badges repo * Add new kudos fields, artist and platform * Update Rinkeby address * Add kudos_mainnet.yaml for soft launch * add profile about * Add mainnet address * Support reading private keys from .env * Update kudos clone utils and mgmt functions * Be able to pass mint_to address into command * Making clone kudos util command work * Add kudos private key vars to settings.py * Add update_kudos_metadata script (not tested yet) * Kudos minted on mainnet will point to kudosdemo for now * Update external_url per network * Add debug and value to gas estimate * add author * change kudos send feedbacks * add styles * add styles * add kudos nav * add kudos nav * change logos * change send kudos * fixes the javascript on kudos details page * add topbar on all pages * add grants nav * Fixes * change menu * add title to landing * add gif logo * adds kudos to results page * make fix * comments * make fix * fixes font awesome icongs * fix mobile menu * add not found profiles * Add burn util and management function * Go away psycopg2 warnings * Fix fresh_start script * update kudos abi * add inactive and change claim kudos * a fix for kudos - levitate being off basee * Add automatic local syncing via docker-command.bash * fix kudos navbar * fix svg font * Remove mnemonic from docker-compose, use ENV var * Update fresh_start script for web repo * Fix typo for mnemonic * Fix TEST_MNEMONIC quoting issue * Upgrade to web3py 4.7.2 * Inject poa middleware for rinkeby network * Clean up extraneous python imports * Remove deprecated kudos fixtures * Ignore the trouble making JS files * Run isort on kudos files * Run isort on dashboard * isort mails, emails, urls * Minor formatting changes to make linter happy * Updates to kudos_send to appease eslint * Replace totalSupply with getLatestId to get latest kudos id Fixes https://github.com/mbeacom/gitcoin-erc721/issues/193 * fix lint js * fix lint in range * fix send kudos * Quiet down the noise travis build * Compress images * You win Stickler * Remove TODO from urls.py * Remove from __future__ * Docstring formatting * Remove extraneous migration file * Revert "Quiet down the noise travis build" This reverts commit b56ee35b7b807a7798f17d695a4b7ada080c6117. * Small formatting cleanup * Remove trailing whitespace * fix tabs.js broking wallets js * Temporarily disable kudos crontab entries * Clean up migration files * fix css lint * Revert "Clean up migration files" This reverts commit 6910cdfc91bdf9bca673d3c46dc34f48d08f3f6d. * One more time * Minify tweenlite.js * Clean up exceptions for receive_url_for_recipient * lipstick - removing old code comments - formatting stuff * Don't need kudos apps.py * Add gettext to label * fix diffs * Move Kudos contract addresses to settings.py * Fix related_kudos filter * More formatting and dead code cleanup * hide grants menu link * Moar docstrings * add faq * Updates to account for multiple Kudos contracts * comment out local_filter_middleware until its released * fix rain bg * add error msg * clean * fix https://github.com/mbeacom/gitcoin-erc721/issues/173 * Revert "Upgrade to web3py 4.7.2" This reverts commit 7f26652d9a25a996cb41c6e3a24641ad5b31ab37. * network and contract_address should be required fields * Update link for "Start Over" in Kudos Send page * Fix migration file bug * Don't put # in background_color * FIx logging output to be token_id instead of row id * Update sync_kudos log file name * Add new kudos assets * Revert "Minify tweenlite.js" This reverts commit 1e9a62906b3d173b780f97489228f6176e2d6882. * Change to web3 4.6.0 * Fix network name * small updates * Revert "Change to web3 4.6.0" This reverts commit 37e3a674d5351e45f46c30d0ad59cc7424f91f84. * Add smaller kudos_test.yaml for testing * Compress new kudos images * Display github picture if avatar doesn't exist * Update sync method for multiple kudos contract * remove bad localhost network detection * Fix compressed animations * add disqus * add dot notification * fix sizes in select * change kudos text * fix img size * make fix, also: adds support for png images of each kudos * Break out kudos.Contract into its own model This is to better support having multiple deployed kudos contracts. * Add new URL route to do lookups by contract and token_id * Stub out some basic tests for Kudos * Update external_url to be the correct token_id for all networks * Add helper to resolve a kudos token * More updates to handle multiple token_ids across contracts * Update KUDOS_NETWORK env var * Update abi with latest contract code * Update --catchup flag for new schema * Fix template typo * Make mint url consistent with others * Fix get_token resolution logic * Fix ability to load /send page without an id * Extra space * How about some tests * change about page * change svgo command * add correct svg * iSort fixes * Re-compress images using --disable=removeViewBox * Revert "Compress images" This reverts commit 5fcc26ab41940af445acda3e0cdb6313146b0b2d. * Re-compress kudos images from scratch Ssing --disable=removeViewBox * Update rinkeby contract address * Don't add middleware twice (added downstream already) * 404 if the kudos id doesn't exist * Fix confusing debug message * Add gas_estimate debug msg * Add decorator to log out contract args * Update rinkeby contract address * Update rinkeby contract * update rinkeby contract address for abi.js * fix static subdomain for staging * Update rinkeby address * iSort fixx * Fixes * Remove dead code * Only show settings.KUDOS_NETWORK in marketplace * Update kudos crontab * change gif logo * rewrites marketplace search * Add search test for marketplace * Encode image names to handle bad chars Fix c++_scientist * FIx tags splitting incorrectly * fix usersearch console error * fix inline send * add style for none clones * fix inline send * fix profile pictures * fix lint * update text * Change rarity labels * add generation * Add new kudos assets * New deployment to rinkeby * Update method id's for block listener Syncing this way still sucks though * Handle case where start_id might not be valid * FIx blue box overlap values * Sync Gen0 token when cloned * Fix kudos detail numbers * Fix Kudos Indirect Send The issue was that is was using the incorrect tokenId. It was using kudos_token.id (pk) instead of the kudos_token.token_id (contract token id). * add gold line * fix sent cards data * clean * fix pagination and change method * remove white space * Update for latest Rinkeby Contract * FIx typo * Update mainnet contract address * Add additional gas_price_gwei option * Make gas price optional * Fix sent kudos on profile, adjust some logic and DRY it up a bit * Adjust profile kudos queries to use both pref payout addy and profile relations * Update kudos detail route to use kudos_id * hide kudos stuff until its been QAed... revert this when kudos has been QAed and looks good * Squash kudos migrations --- .eslintignore | 2 + .gitignore | 1 + .stylelintignore | 2 + app/app/context.py | 6 + app/app/settings.py | 19 +- app/app/urls.py | 30 +- app/assets/onepager/css/main.css | 24 - app/assets/onepager/js/receive.js | 2 +- app/assets/v2/css/base.css | 4 - app/assets/v2/css/buttons.css | 10 - app/assets/v2/css/gitcoin.css | 70 +- app/assets/v2/css/kudos/range-slider.scss | 37 + .../v2/css/kudos/select2.bootstrap4.scss | 68 + app/assets/v2/css/kudos/styles.css | 578 ++++ app/assets/v2/css/kudos/styles.css.map | 7 + app/assets/v2/css/kudos/styles.scss | 689 +++++ app/assets/v2/css/kudos/transaction.scss | 57 + app/assets/v2/css/lib/typography.css | 38 +- app/assets/v2/css/rain.css | 12 +- app/assets/v2/css/select2-kudos.css | 140 + app/assets/v2/css/top-nav.css | 69 + app/assets/v2/fonts/Muli/Bold.ttf | Bin 52836 -> 0 bytes app/assets/v2/fonts/Muli/BoldItalic.ttf | Bin 53512 -> 0 bytes app/assets/v2/fonts/Muli/ExtraLight.ttf | Bin 48220 -> 0 bytes app/assets/v2/fonts/Muli/ExtraLightItalic.ttf | Bin 49204 -> 0 bytes app/assets/v2/fonts/Muli/Light.ttf | Bin 48856 -> 0 bytes app/assets/v2/fonts/Muli/LightItalic.ttf | Bin 49552 -> 0 bytes app/assets/v2/fonts/Muli/Regular.ttf | Bin 49008 -> 0 bytes app/assets/v2/fonts/Muli/RegularItalic.ttf | Bin 49760 -> 0 bytes app/assets/v2/fonts/Muli/SemiBold.ttf | Bin 49272 -> 0 bytes app/assets/v2/fonts/Muli/SemiBoldItalic.ttf | Bin 49488 -> 0 bytes .../v2/fonts/muli/muli-v12-latin-200.eot | Bin 0 -> 19700 bytes .../v2/fonts/muli/muli-v12-latin-200.svg | 310 ++ .../v2/fonts/muli/muli-v12-latin-200.ttf | Bin 0 -> 38540 bytes .../v2/fonts/muli/muli-v12-latin-200.woff | Bin 0 -> 21248 bytes .../v2/fonts/muli/muli-v12-latin-200.woff2 | Bin 0 -> 17152 bytes .../v2/fonts/muli/muli-v12-latin-600.eot | Bin 0 -> 20099 bytes .../v2/fonts/muli/muli-v12-latin-600.svg | 309 ++ .../v2/fonts/muli/muli-v12-latin-600.ttf | Bin 0 -> 40320 bytes .../v2/fonts/muli/muli-v12-latin-600.woff | Bin 0 -> 21540 bytes .../v2/fonts/muli/muli-v12-latin-600.woff2 | Bin 0 -> 17396 bytes .../v2/fonts/muli/muli-v12-latin-700.eot | Bin 0 -> 20069 bytes .../v2/fonts/muli/muli-v12-latin-700.svg | 308 ++ .../v2/fonts/muli/muli-v12-latin-700.ttf | Bin 0 -> 39848 bytes .../v2/fonts/muli/muli-v12-latin-700.woff | Bin 0 -> 21584 bytes .../v2/fonts/muli/muli-v12-latin-700.woff2 | Bin 0 -> 17432 bytes .../v2/fonts/muli/muli-v12-latin-regular.eot | Bin 0 -> 20087 bytes .../v2/fonts/muli/muli-v12-latin-regular.svg | 310 ++ .../v2/fonts/muli/muli-v12-latin-regular.ttf | Bin 0 -> 40708 bytes .../v2/fonts/muli/muli-v12-latin-regular.woff | Bin 0 -> 21588 bytes .../fonts/muli/muli-v12-latin-regular.woff2 | Bin 0 -> 17456 bytes .../avatar/Accessories/HatShort-cowboy.svg | 2 +- .../avatar/Accessories/Masks-gitcoinbot.svg | 35 +- .../avatar/Accessories/Masks-guy-fawkes.svg | 2 +- .../Masks-jack-o-lantern-lighted.svg | 2 +- .../avatar/Clothing/spacecadet-4242F4.svg | 2 +- .../avatar/Clothing/spacecadet-F48914.svg | 2 +- .../v2/images/avatar/Clothing/suit-4242F4.svg | 2 +- .../v2/images/avatar/Clothing/suit-43B9F9.svg | 2 +- .../v2/images/avatar/Clothing/suit-684A23.svg | 2 +- .../v2/images/avatar/Clothing/suit-CCCCCC.svg | 2 +- .../v2/images/avatar/Clothing/suit-F48914.svg | 2 +- .../v2/images/avatar/Clothing/suit-FFCC3B.svg | 2 +- app/assets/v2/images/emails/email-kudos.png | Bin 0 -> 9712 bytes app/assets/v2/images/emails/generic-kudos.png | Bin 0 -> 27505 bytes app/assets/v2/images/emails/kudos-group.png | Bin 0 -> 265997 bytes app/assets/v2/images/emails/kudos-logo.png | Bin 0 -> 17245 bytes .../v2/images/emails/kudos-transfer.jpg | Bin 0 -> 44511 bytes app/assets/v2/images/grow_open_source_new.png | Bin 13621 -> 47171 bytes app/assets/v2/images/kudos-flower.gif | Bin 0 -> 120922 bytes app/assets/v2/images/kudos/a_genius.svg | 1 + .../v2/images/kudos/above_and_beyond.svg | 1 + .../v2/images/kudos/always_shipping.svg | 1 + .../v2/images/kudos/angular_royalty.svg | 1 + .../v2/images/kudos/app_dev_all_star.svg | 1 + app/assets/v2/images/kudos/arts_and_farts.svg | 1 + .../v2/images/kudos/assets/cellarius-logo.png | Bin 0 -> 17512 bytes .../v2/images/kudos/assets/cellarius-logo.svg | 1 + .../assets/cellarius_logo_horizontal.svg | 1 + .../kudos/assets/empty-kudos-desktop.svg | 1 + .../v2/images/kudos/assets/empty-kudos.svg | 1 + app/assets/v2/images/kudos/assets/erc-721.svg | 1 + app/assets/v2/images/kudos/assets/how-get.svg | 1 + .../v2/images/kudos/assets/kudos-diamond.svg | 1 + .../v2/images/kudos/assets/kudos-image.png | Bin 0 -> 223888 bytes .../v2/images/kudos/assets/no-kudos.gif | Bin 0 -> 127718 bytes .../v2/images/kudos/assets/octavian.jpg | Bin 0 -> 23727 bytes .../v2/images/kudos/assets/send-kudos.png | Bin 0 -> 45426 bytes app/assets/v2/images/kudos/assets/star.png | Bin 0 -> 3555 bytes app/assets/v2/images/kudos/backend_star.svg | 1 + .../v2/images/kudos/bee_of_all_trades.svg | 1 + app/assets/v2/images/kudos/birds.svg | 1 + .../v2/images/kudos/blockchain_star.svg | 1 + .../v2/images/kudos/blockchain_the_world.svg | 1 + .../v2/images/kudos/blockchain_utopia.svg | 1 + .../v2/images/kudos/blockchain_world.svg | 1 + app/assets/v2/images/kudos/bug_squasher.svg | 1 + .../v2/images/kudos/bug_squasher_new.svg | 1 + .../kudos/builder_of_a_better_world.svg | 1 + .../v2/images/kudos/business_minded.svg | 1 + app/assets/v2/images/kudos/c++_scientist.svg | 1 + app/assets/v2/images/kudos/c_debugger.svg | 1 + .../v2/images/kudos/c_sharp_programmer.svg | 1 + .../v2/images/kudos/cellarius/Burst.svg | 1 + .../v2/images/kudos/cellarius/Circle.svg | 1 + .../v2/images/kudos/cellarius/Diamond.svg | 1 + .../v2/images/kudos/cellarius/Infinite.svg | 1 + .../v2/images/kudos/cellarius/Spaghetti.svg | 1 + .../v2/images/kudos/cellarius/Triangle.svg | 1 + .../kudos/cellarius/backend_architect.svg | 1 + .../images/kudos/cellarius/bug_eliminator.svg | 1 + .../v2/images/kudos/cellarius/bug_finder.svg | 1 + .../kudos/cellarius/cellarius/Burst.svg | 1 + .../kudos/cellarius/cellarius/Circle.svg | 1 + .../kudos/cellarius/cellarius/Diamond.svg | 1 + .../kudos/cellarius/cellarius/Infinite.svg | 1 + .../kudos/cellarius/cellarius/Spaghetti.svg | 1 + .../kudos/cellarius/cellarius/Triangle.svg | 1 + .../cellarius/cellarius/backend_architect.svg | 1 + .../cellarius/cellarius/bug_eliminator.svg | 1 + .../kudos/cellarius/cellarius/bug_finder.svg | 1 + .../kudos/cellarius/cellarius/heart.svg | 1 + .../cellarius/cellarius/lightning_fast.svg | 1 + .../kudos/cellarius/cellarius/oddjobs.svg | 1 + .../cellarius/trusted_contributor.svg | 1 + .../v2/images/kudos/cellarius/heart.svg | 1 + .../images/kudos/cellarius/lightning_fast.svg | 1 + .../v2/images/kudos/cellarius/oddjobs.svg | 1 + .../kudos/cellarius/trusted_contributor.svg | 1 + app/assets/v2/images/kudos/cleanest_code.svg | 1 + .../v2/images/kudos/climb_the_ladder.svg | 1 + app/assets/v2/images/kudos/code_shipper.svg | 1 + app/assets/v2/images/kudos/coding_ducky.svg | 1 + app/assets/v2/images/kudos/collab_robot.svg | 1 + .../v2/images/kudos/collaboration_machine.svg | 1 + .../v2/images/kudos/collaboration_robot.svg | 1 + .../v2/images/kudos/corporate_ladder.svg | 1 + app/assets/v2/images/kudos/craftsman.svg | 1 + .../v2/images/kudos/css_gentle(wo)man.svg | 1 + app/assets/v2/images/kudos/data_savvy.svg | 1 + .../v2/images/kudos/delegation_machine.svg | 1 + app/assets/v2/images/kudos/design_star.svg | 1 + app/assets/v2/images/kudos/devcon_4.svg | 1 + app/assets/v2/images/kudos/direct.svg | 1 + app/assets/v2/images/kudos/django_cowboy.svg | 1 + app/assets/v2/images/kudos/django_dev.svg | 1 + app/assets/v2/images/kudos/django_pony.svg | 1 + app/assets/v2/images/kudos/do_more_faster.svg | 1 + .../v2/images/kudos/dont_just_hodl_buidl.svg | 1 + .../v2/images/kudos/drupal_brainiac.svg | 1 + app/assets/v2/images/kudos/elixer_mixer.svg | 1 + app/assets/v2/images/kudos/ember_master.svg | 1 + app/assets/v2/images/kudos/eth_hacker2.svg | 1 + .../images/kudos/ethereum_constellation.svg | 1 + app/assets/v2/images/kudos/eye_for_detail.svg | 1 + app/assets/v2/images/kudos/fast_response.svg | 1 + .../v2/images/kudos/fast_turn_around.svg | 1 + app/assets/v2/images/kudos/firefighter.svg | 1 + app/assets/v2/images/kudos/fission_color.svg | 1 + app/assets/v2/images/kudos/flying_pony.svg | 1 + app/assets/v2/images/kudos/focus.svg | 1 + app/assets/v2/images/kudos/freedom.svg | 1 + .../v2/images/kudos/frontend_alchemist.svg | 1 + app/assets/v2/images/kudos/g1.svg | 1 + app/assets/v2/images/kudos/games_first.svg | 1 + .../v2/images/kudos/games_runner up.svg | 1 + .../v2/images/kudos/games_runner_up.svg | 1 + .../v2/images/kudos/gitcoin_genesis.svg | 1 + app/assets/v2/images/kudos/gitcoin_rasta.svg | 1 + .../v2/images/kudos/gitcoin_sustainer.svg | 1 + app/assets/v2/images/kudos/gitcoin_tree.svg | 1 + .../v2/images/kudos/gitter_of_coins.svg | 1 + app/assets/v2/images/kudos/go_developer.svg | 1 + .../v2/images/kudos/good_communicator.svg | 1 + .../v2/images/kudos/grow_open_source.svg | 1 + .../v2/images/kudos/growopen_source.svg | 1 + .../v2/images/kudos/growoss_crystalball.svg | 1 + app/assets/v2/images/kudos/hadoop_admiral.svg | 1 + app/assets/v2/images/kudos/handy_woman.svg | 1 + app/assets/v2/images/kudos/handyman.svg | 1 + app/assets/v2/images/kudos/hard_worker.svg | 1 + app/assets/v2/images/kudos/helping_hand.svg | 1 + app/assets/v2/images/kudos/heros_honour.svg | 1 + app/assets/v2/images/kudos/html_celebrity.svg | 1 + app/assets/v2/images/kudos/idea_person.svg | 1 + .../v2/images/kudos/infrastructure_ninja.svg | 1 + app/assets/v2/images/kudos/java_doctor.svg | 1 + .../kudos/javascript_master_scriber.svg | 1 + app/assets/v2/images/kudos/jquery_fixer.svg | 1 + app/assets/v2/images/kudos/kauri_1.svg | 1 + app/assets/v2/images/kudos/kauri_2.svg | 1 + .../images/kudos/kudos_faster_repeat-bkp.gif | Bin 0 -> 28263 bytes .../images/kudos/kudos_faster_repeat-bkp2.gif | Bin 0 -> 20044 bytes .../v2/images/kudos/kudos_faster_repeat.gif | Bin 0 -> 42609 bytes app/assets/v2/images/kudos/level_up.svg | 1 + .../v2/images/kudos/link_legend_of_zelda.svg | 1 + app/assets/v2/images/kudos/linux_wizard.svg | 1 + app/assets/v2/images/kudos/logins_color.svg | 1 + app/assets/v2/images/kudos/logo.svg | 1 + app/assets/v2/images/kudos/magic_unicorn.svg | 1 + .../v2/images/kudos/mana_from_heavens.svg | 1 + app/assets/v2/images/kudos/market_first.svg | 1 + .../images/kudos/marketplaces_runner up.svg | 1 + .../images/kudos/marketplaces_runner_up.svg | 1 + .../images/kudos/mega_open_collaborator.svg | 1 + .../v2/images/kudos/mongo_db_programmer.svg | 1 + app/assets/v2/images/kudos/mysql_hero.svg | 1 + app/assets/v2/images/kudos/new_dawn.svg | 1 + app/assets/v2/images/kudos/night_owl.svg | 1 + app/assets/v2/images/kudos/node_js_wizard.svg | 1 + .../kudos/open_source_freedom_fighter.svg | 1 + .../kudos/out_of_this_world_programmer.svg | 1 + .../v2/images/kudos/participant_color.svg | 1 + app/assets/v2/images/kudos/party_robot.svg | 1 + app/assets/v2/images/kudos/path.svg | 1 + app/assets/v2/images/kudos/path_finder.svg | 1 + app/assets/v2/images/kudos/philosophers.svg | 1 + app/assets/v2/images/kudos/php_superstar.svg | 1 + app/assets/v2/images/kudos/powertool_user.svg | 1 + app/assets/v2/images/kudos/powertools.svg | 1 + app/assets/v2/images/kudos/praying.svg | 1 + app/assets/v2/images/kudos/problem_solver.svg | 1 + app/assets/v2/images/kudos/product_wizard.svg | 1 + app/assets/v2/images/kudos/pythonista.svg | 1 + app/assets/v2/images/kudos/qa_ninja.svg | 1 + app/assets/v2/images/kudos/react_reactor.svg | 1 + app/assets/v2/images/kudos/red_stapler.svg | 1 + .../v2/images/kudos/redux_programmer.svg | 1 + .../images/kudos/release_early_and_often.svg | 1 + app/assets/v2/images/kudos/robot_large.svg | 1 + app/assets/v2/images/kudos/robot_medium.svg | 1 + app/assets/v2/images/kudos/robot_small.svg | 1 + app/assets/v2/images/kudos/ruby_gem.svg | 1 + .../v2/images/kudos/ruby_on_rails_machine.svg | 1 + .../v2/images/kudos/ruby_on_rails_master.svg | 1 + app/assets/v2/images/kudos/scirbe_color.svg | 1 + app/assets/v2/images/kudos/shill_colorado.svg | 1 + app/assets/v2/images/kudos/shill_ethereum.svg | 1 + .../images/kudos/shillin_like_a_villian.svg | 1 + app/assets/v2/images/kudos/shillville.svg | 1 + app/assets/v2/images/kudos/social_first.svg | 1 + .../v2/images/kudos/social_runner up.svg | 1 + .../v2/images/kudos/social_runner_up.svg | 1 + app/assets/v2/images/kudos/sociall_first.svg | 1 + app/assets/v2/images/kudos/struck_oil.svg | 1 + .../v2/images/kudos/subscription_color.svg | 1 + app/assets/v2/images/kudos/sunburst.svg | 1 + app/assets/v2/images/kudos/super_juggler.svg | 1 + app/assets/v2/images/kudos/sustainer.svg | 1 + app/assets/v2/images/kudos/tools.svg | 1 + app/assets/v2/images/kudos/travel_first.svg | 1 + .../v2/images/kudos/travel_runner up.svg | 1 + .../v2/images/kudos/travel_runner_up.svg | 1 + .../v2/images/kudos/unix_philosophy.svg | 1 + app/assets/v2/images/kudos/vitalik.svg | 1 + .../v2/images/kudos/vitalik_genesis.svg | 1 + .../v2/images/kudos/volunteer_color.svg | 1 + app/assets/v2/images/kudos/wallet_color.svg | 1 + app/assets/v2/images/kudos/west.svg | 1 + app/assets/v2/images/kudos/wildcard.svg | 1 + .../v2/images/top-bar/codefund-logo.svg | 31 + .../v2/images/top-bar/codefund-symbol.svg | 17 + app/assets/v2/images/top-bar/gitcoin-logo.svg | 28 + .../v2/images/top-bar/gitcoin-symbol.svg | 23 + app/assets/v2/images/top-bar/grants-logo.svg | 39 + .../v2/images/top-bar/grants-symbol.svg | 25 + app/assets/v2/images/top-bar/kudos-logo.svg | 20 + app/assets/v2/images/top-bar/kudos-symbol.svg | 15 + app/assets/v2/js/abi.js | 24 +- app/assets/v2/js/ajax-helper.js | 24 + app/assets/v2/js/base.js | 22 +- app/assets/v2/js/bootstrap.min.js | 7 + app/assets/v2/js/eth-price.js | 33 + app/assets/v2/js/jquery.select2.min.js | 2 +- app/assets/v2/js/kudos-search.js | 179 ++ app/assets/v2/js/pages/kudos-search.js | 34 + app/assets/v2/js/pages/kudos_details.js | 155 + app/assets/v2/js/pages/kudos_receive.js | 185 ++ app/assets/v2/js/pages/kudos_send.js | 557 ++++ app/assets/v2/js/pages/process_bounty.js | 54 +- app/assets/v2/js/popper.min.js | 5 + app/assets/v2/js/range-slider.js | 33 + app/assets/v2/js/truncate-hash.js | 2 +- app/assets/v2/js/tweenlite.js | 2600 +++++++++++++++++ app/assets/v2/js/user-search.js | 6 +- .../templates/bounty_request_form.html | 1 + .../migrations/0110_auto_20181027_1727.py | 30 + app/dashboard/models.py | 83 +- app/dashboard/notifications.py | 65 +- app/dashboard/templates/bounty/change.html | 1 + app/dashboard/templates/bounty/details.html | 1 + app/dashboard/templates/bounty/fulfill.html | 1 + app/dashboard/templates/bounty/increase.html | 1 + app/dashboard/templates/bounty/kill.html | 1 + app/dashboard/templates/bounty/new.html | 1 + .../templates/bulk_payout_bounty.html | 1 + .../templates/contribute_bounty.html | 1 + app/dashboard/templates/dashboard/index.html | 1 + app/dashboard/templates/ftux/onboard.html | 1 + app/dashboard/templates/legal/terms.html | 1 + app/dashboard/templates/onepager/base.html | 5 +- app/dashboard/templates/payout_bounty.html | 2 + app/dashboard/templates/process_bounty.html | 20 +- app/dashboard/templates/profiles/profile.html | 140 +- app/dashboard/templates/quickstart.html | 1 + app/dashboard/templates/shared/add_kudos.html | 36 + app/dashboard/templates/shared/nav_auth.html | 19 +- .../templates/shared/profile_kudos.html | 76 + .../templates/social_contribution.html | 1 + app/dashboard/templates/toolbox.html | 1 + app/dashboard/utils.py | 18 +- app/dashboard/views.py | 174 +- .../templates/external_bounties.html | 1 + .../templates/external_bounties_new.html | 1 + .../templates/external_bounties_show.html | 1 + app/faucet/templates/faucet_form.html | 1 + app/kudos/Kudos.json | 1 + .../profile_details.js => kudos/__init__.py} | 0 app/kudos/admin.py | 56 + app/kudos/forms.py | 30 + app/kudos/helpers.py | 101 + app/kudos/kudos.yaml | 1801 ++++++++++++ app/kudos/kudos_mainnet.yaml | 180 ++ app/kudos/kudos_test.yaml | 120 + app/kudos/management/commands/burn_kudos.py | 68 + app/kudos/management/commands/clone_kudos.py | 69 + .../management/commands/mint_all_kudos.py | 171 ++ app/kudos/management/commands/mint_kudos.py | 67 + .../commands/remove_kudos_orphans.py | 48 + app/kudos/management/commands/sync_kudos.py | 223 ++ .../commands/sync_kudos_listener.py | 158 + .../commands/update_kudos_metadata.py | 131 + app/kudos/migrations/0001_initial.py | 125 + app/kudos/migrations/__init__.py | 0 app/kudos/models.py | 299 ++ app/kudos/router.py | 109 + app/kudos/templates/__init__.py | 0 app/kudos/templates/kudos_about.html | 347 +++ app/kudos/templates/kudos_details.html | 138 + app/kudos/templates/kudos_marketplace.html | 96 + app/kudos/templates/kudos_mint.html | 71 + app/kudos/templates/shared/kudos_banner.html | 21 + app/kudos/templates/shared/kudos_card.html | 25 + .../templates/shared/kudos_card_profile.html | 76 + .../templates/shared/kudos_levitate.html | 48 + app/kudos/templates/shared/kudos_nav.html | 61 + .../templates/shared/kudos_searchbar.html | 59 + app/kudos/templates/transaction/base.html | 65 + .../templates/transaction/kudos_auth.html | 99 + app/kudos/templates/transaction/receive.html | 111 + .../templates/transaction/receive_legacy.html | 84 + .../templates/transaction/receive_v2.html | 71 + app/kudos/templates/transaction/send.html | 180 ++ app/kudos/templates/transaction/send1.html | 46 + app/kudos/templatetags/kudos_extras.py | 64 + app/kudos/test_models.py | 22 + app/kudos/test_utils.py | 53 + app/kudos/test_views.py | 97 + app/kudos/utils.py | 640 ++++ app/kudos/views.py | 523 ++++ app/marketing/mails.py | 34 +- app/marketing/utils.py | 1 + app/retail/emails.py | 72 + app/retail/templates/about.html | 1 + app/retail/templates/activity.html | 1 + app/retail/templates/base.html | 1 + app/retail/templates/emails/kudos_mint.html | 96 + app/retail/templates/emails/kudos_mkt.html | 100 + app/retail/templates/emails/new_kudos.html | 139 + app/retail/templates/emails/new_kudos.txt | 30 + app/retail/templates/emails/template.html | 11 +- app/retail/templates/help.html | 5 +- app/retail/templates/how_it_works/index.html | 5 +- .../increase_funding_limit_request_form.html | 1 + app/retail/templates/index.html | 1 + app/retail/templates/landing/contributor.html | 1 + app/retail/templates/landing/funder.html | 1 + app/retail/templates/leaderboard.html | 1 + app/retail/templates/mission.html | 1 + app/retail/templates/not_a_token.html | 1 + app/retail/templates/presskit.html | 1 + app/retail/templates/results.html | 36 +- app/retail/templates/shared/footer.html | 1 + .../templates/shared/footer_scripts.html | 5 +- app/retail/templates/shared/grants_nav.html | 59 + app/retail/templates/shared/head.html | 1 + app/retail/templates/shared/top_nav.html | 37 + app/retail/templates/vision.html | 1 + app/retail/utils.py | 4 + bin/docker-command.bash | 5 + docker-compose.yml | 3 +- js-sdk/.gitignore | 2 +- requirements/base.txt | 5 +- scripts/compress_images.bash | 2 +- scripts/crontab | 4 + scripts/fresh_start.bash | 38 + scripts/sync_kudos_listener_local.bash | 1 + scripts/sync_kudos_local.bash | 4 + 398 files changed, 15425 insertions(+), 188 deletions(-) create mode 100644 app/assets/v2/css/kudos/range-slider.scss create mode 100644 app/assets/v2/css/kudos/select2.bootstrap4.scss create mode 100644 app/assets/v2/css/kudos/styles.css create mode 100644 app/assets/v2/css/kudos/styles.css.map create mode 100644 app/assets/v2/css/kudos/styles.scss create mode 100644 app/assets/v2/css/kudos/transaction.scss create mode 100644 app/assets/v2/css/select2-kudos.css create mode 100644 app/assets/v2/css/top-nav.css delete mode 100755 app/assets/v2/fonts/Muli/Bold.ttf delete mode 100755 app/assets/v2/fonts/Muli/BoldItalic.ttf delete mode 100755 app/assets/v2/fonts/Muli/ExtraLight.ttf delete mode 100755 app/assets/v2/fonts/Muli/ExtraLightItalic.ttf delete mode 100755 app/assets/v2/fonts/Muli/Light.ttf delete mode 100755 app/assets/v2/fonts/Muli/LightItalic.ttf delete mode 100755 app/assets/v2/fonts/Muli/Regular.ttf delete mode 100755 app/assets/v2/fonts/Muli/RegularItalic.ttf delete mode 100755 app/assets/v2/fonts/Muli/SemiBold.ttf delete mode 100755 app/assets/v2/fonts/Muli/SemiBoldItalic.ttf create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-200.eot create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-200.svg create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-200.ttf create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-200.woff create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-200.woff2 create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-600.eot create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-600.svg create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-600.ttf create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-600.woff create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-600.woff2 create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-700.eot create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-700.svg create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-700.ttf create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-700.woff create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-700.woff2 create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-regular.eot create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-regular.svg create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-regular.ttf create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-regular.woff create mode 100644 app/assets/v2/fonts/muli/muli-v12-latin-regular.woff2 create mode 100644 app/assets/v2/images/emails/email-kudos.png create mode 100644 app/assets/v2/images/emails/generic-kudos.png create mode 100644 app/assets/v2/images/emails/kudos-group.png create mode 100644 app/assets/v2/images/emails/kudos-logo.png create mode 100644 app/assets/v2/images/emails/kudos-transfer.jpg create mode 100644 app/assets/v2/images/kudos-flower.gif create mode 100644 app/assets/v2/images/kudos/a_genius.svg create mode 100644 app/assets/v2/images/kudos/above_and_beyond.svg create mode 100644 app/assets/v2/images/kudos/always_shipping.svg create mode 100644 app/assets/v2/images/kudos/angular_royalty.svg create mode 100644 app/assets/v2/images/kudos/app_dev_all_star.svg create mode 100644 app/assets/v2/images/kudos/arts_and_farts.svg create mode 100644 app/assets/v2/images/kudos/assets/cellarius-logo.png create mode 100644 app/assets/v2/images/kudos/assets/cellarius-logo.svg create mode 100644 app/assets/v2/images/kudos/assets/cellarius_logo_horizontal.svg create mode 100644 app/assets/v2/images/kudos/assets/empty-kudos-desktop.svg create mode 100644 app/assets/v2/images/kudos/assets/empty-kudos.svg create mode 100644 app/assets/v2/images/kudos/assets/erc-721.svg create mode 100644 app/assets/v2/images/kudos/assets/how-get.svg create mode 100644 app/assets/v2/images/kudos/assets/kudos-diamond.svg create mode 100644 app/assets/v2/images/kudos/assets/kudos-image.png create mode 100644 app/assets/v2/images/kudos/assets/no-kudos.gif create mode 100644 app/assets/v2/images/kudos/assets/octavian.jpg create mode 100644 app/assets/v2/images/kudos/assets/send-kudos.png create mode 100644 app/assets/v2/images/kudos/assets/star.png create mode 100644 app/assets/v2/images/kudos/backend_star.svg create mode 100644 app/assets/v2/images/kudos/bee_of_all_trades.svg create mode 100644 app/assets/v2/images/kudos/birds.svg create mode 100644 app/assets/v2/images/kudos/blockchain_star.svg create mode 100644 app/assets/v2/images/kudos/blockchain_the_world.svg create mode 100644 app/assets/v2/images/kudos/blockchain_utopia.svg create mode 100644 app/assets/v2/images/kudos/blockchain_world.svg create mode 100644 app/assets/v2/images/kudos/bug_squasher.svg create mode 100644 app/assets/v2/images/kudos/bug_squasher_new.svg create mode 100644 app/assets/v2/images/kudos/builder_of_a_better_world.svg create mode 100644 app/assets/v2/images/kudos/business_minded.svg create mode 100644 app/assets/v2/images/kudos/c++_scientist.svg create mode 100644 app/assets/v2/images/kudos/c_debugger.svg create mode 100644 app/assets/v2/images/kudos/c_sharp_programmer.svg create mode 100755 app/assets/v2/images/kudos/cellarius/Burst.svg create mode 100755 app/assets/v2/images/kudos/cellarius/Circle.svg create mode 100755 app/assets/v2/images/kudos/cellarius/Diamond.svg create mode 100755 app/assets/v2/images/kudos/cellarius/Infinite.svg create mode 100755 app/assets/v2/images/kudos/cellarius/Spaghetti.svg create mode 100755 app/assets/v2/images/kudos/cellarius/Triangle.svg create mode 100755 app/assets/v2/images/kudos/cellarius/backend_architect.svg create mode 100755 app/assets/v2/images/kudos/cellarius/bug_eliminator.svg create mode 100755 app/assets/v2/images/kudos/cellarius/bug_finder.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/Burst.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/Circle.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/Diamond.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/Infinite.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/Spaghetti.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/Triangle.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/backend_architect.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/bug_eliminator.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/bug_finder.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/heart.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/lightning_fast.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/oddjobs.svg create mode 100755 app/assets/v2/images/kudos/cellarius/cellarius/trusted_contributor.svg create mode 100755 app/assets/v2/images/kudos/cellarius/heart.svg create mode 100755 app/assets/v2/images/kudos/cellarius/lightning_fast.svg create mode 100755 app/assets/v2/images/kudos/cellarius/oddjobs.svg create mode 100755 app/assets/v2/images/kudos/cellarius/trusted_contributor.svg create mode 100644 app/assets/v2/images/kudos/cleanest_code.svg create mode 100644 app/assets/v2/images/kudos/climb_the_ladder.svg create mode 100644 app/assets/v2/images/kudos/code_shipper.svg create mode 100644 app/assets/v2/images/kudos/coding_ducky.svg create mode 100644 app/assets/v2/images/kudos/collab_robot.svg create mode 100644 app/assets/v2/images/kudos/collaboration_machine.svg create mode 100644 app/assets/v2/images/kudos/collaboration_robot.svg create mode 100644 app/assets/v2/images/kudos/corporate_ladder.svg create mode 100644 app/assets/v2/images/kudos/craftsman.svg create mode 100644 app/assets/v2/images/kudos/css_gentle(wo)man.svg create mode 100644 app/assets/v2/images/kudos/data_savvy.svg create mode 100644 app/assets/v2/images/kudos/delegation_machine.svg create mode 100644 app/assets/v2/images/kudos/design_star.svg create mode 100644 app/assets/v2/images/kudos/devcon_4.svg create mode 100644 app/assets/v2/images/kudos/direct.svg create mode 100644 app/assets/v2/images/kudos/django_cowboy.svg create mode 100644 app/assets/v2/images/kudos/django_dev.svg create mode 100644 app/assets/v2/images/kudos/django_pony.svg create mode 100644 app/assets/v2/images/kudos/do_more_faster.svg create mode 100644 app/assets/v2/images/kudos/dont_just_hodl_buidl.svg create mode 100644 app/assets/v2/images/kudos/drupal_brainiac.svg create mode 100644 app/assets/v2/images/kudos/elixer_mixer.svg create mode 100644 app/assets/v2/images/kudos/ember_master.svg create mode 100644 app/assets/v2/images/kudos/eth_hacker2.svg create mode 100644 app/assets/v2/images/kudos/ethereum_constellation.svg create mode 100644 app/assets/v2/images/kudos/eye_for_detail.svg create mode 100644 app/assets/v2/images/kudos/fast_response.svg create mode 100644 app/assets/v2/images/kudos/fast_turn_around.svg create mode 100644 app/assets/v2/images/kudos/firefighter.svg create mode 100644 app/assets/v2/images/kudos/fission_color.svg create mode 100644 app/assets/v2/images/kudos/flying_pony.svg create mode 100644 app/assets/v2/images/kudos/focus.svg create mode 100644 app/assets/v2/images/kudos/freedom.svg create mode 100644 app/assets/v2/images/kudos/frontend_alchemist.svg create mode 100644 app/assets/v2/images/kudos/g1.svg create mode 100644 app/assets/v2/images/kudos/games_first.svg create mode 100644 app/assets/v2/images/kudos/games_runner up.svg create mode 100644 app/assets/v2/images/kudos/games_runner_up.svg create mode 100644 app/assets/v2/images/kudos/gitcoin_genesis.svg create mode 100644 app/assets/v2/images/kudos/gitcoin_rasta.svg create mode 100644 app/assets/v2/images/kudos/gitcoin_sustainer.svg create mode 100644 app/assets/v2/images/kudos/gitcoin_tree.svg create mode 100644 app/assets/v2/images/kudos/gitter_of_coins.svg create mode 100644 app/assets/v2/images/kudos/go_developer.svg create mode 100644 app/assets/v2/images/kudos/good_communicator.svg create mode 100644 app/assets/v2/images/kudos/grow_open_source.svg create mode 100644 app/assets/v2/images/kudos/growopen_source.svg create mode 100644 app/assets/v2/images/kudos/growoss_crystalball.svg create mode 100644 app/assets/v2/images/kudos/hadoop_admiral.svg create mode 100644 app/assets/v2/images/kudos/handy_woman.svg create mode 100644 app/assets/v2/images/kudos/handyman.svg create mode 100644 app/assets/v2/images/kudos/hard_worker.svg create mode 100644 app/assets/v2/images/kudos/helping_hand.svg create mode 100644 app/assets/v2/images/kudos/heros_honour.svg create mode 100644 app/assets/v2/images/kudos/html_celebrity.svg create mode 100644 app/assets/v2/images/kudos/idea_person.svg create mode 100644 app/assets/v2/images/kudos/infrastructure_ninja.svg create mode 100644 app/assets/v2/images/kudos/java_doctor.svg create mode 100644 app/assets/v2/images/kudos/javascript_master_scriber.svg create mode 100644 app/assets/v2/images/kudos/jquery_fixer.svg create mode 100644 app/assets/v2/images/kudos/kauri_1.svg create mode 100644 app/assets/v2/images/kudos/kauri_2.svg create mode 100644 app/assets/v2/images/kudos/kudos_faster_repeat-bkp.gif create mode 100644 app/assets/v2/images/kudos/kudos_faster_repeat-bkp2.gif create mode 100644 app/assets/v2/images/kudos/kudos_faster_repeat.gif create mode 100644 app/assets/v2/images/kudos/level_up.svg create mode 100644 app/assets/v2/images/kudos/link_legend_of_zelda.svg create mode 100644 app/assets/v2/images/kudos/linux_wizard.svg create mode 100644 app/assets/v2/images/kudos/logins_color.svg create mode 100644 app/assets/v2/images/kudos/logo.svg create mode 100644 app/assets/v2/images/kudos/magic_unicorn.svg create mode 100644 app/assets/v2/images/kudos/mana_from_heavens.svg create mode 100644 app/assets/v2/images/kudos/market_first.svg create mode 100644 app/assets/v2/images/kudos/marketplaces_runner up.svg create mode 100644 app/assets/v2/images/kudos/marketplaces_runner_up.svg create mode 100644 app/assets/v2/images/kudos/mega_open_collaborator.svg create mode 100644 app/assets/v2/images/kudos/mongo_db_programmer.svg create mode 100644 app/assets/v2/images/kudos/mysql_hero.svg create mode 100644 app/assets/v2/images/kudos/new_dawn.svg create mode 100644 app/assets/v2/images/kudos/night_owl.svg create mode 100644 app/assets/v2/images/kudos/node_js_wizard.svg create mode 100644 app/assets/v2/images/kudos/open_source_freedom_fighter.svg create mode 100644 app/assets/v2/images/kudos/out_of_this_world_programmer.svg create mode 100644 app/assets/v2/images/kudos/participant_color.svg create mode 100644 app/assets/v2/images/kudos/party_robot.svg create mode 100644 app/assets/v2/images/kudos/path.svg create mode 100644 app/assets/v2/images/kudos/path_finder.svg create mode 100644 app/assets/v2/images/kudos/philosophers.svg create mode 100644 app/assets/v2/images/kudos/php_superstar.svg create mode 100644 app/assets/v2/images/kudos/powertool_user.svg create mode 100644 app/assets/v2/images/kudos/powertools.svg create mode 100644 app/assets/v2/images/kudos/praying.svg create mode 100644 app/assets/v2/images/kudos/problem_solver.svg create mode 100644 app/assets/v2/images/kudos/product_wizard.svg create mode 100644 app/assets/v2/images/kudos/pythonista.svg create mode 100644 app/assets/v2/images/kudos/qa_ninja.svg create mode 100644 app/assets/v2/images/kudos/react_reactor.svg create mode 100644 app/assets/v2/images/kudos/red_stapler.svg create mode 100644 app/assets/v2/images/kudos/redux_programmer.svg create mode 100644 app/assets/v2/images/kudos/release_early_and_often.svg create mode 100644 app/assets/v2/images/kudos/robot_large.svg create mode 100644 app/assets/v2/images/kudos/robot_medium.svg create mode 100644 app/assets/v2/images/kudos/robot_small.svg create mode 100644 app/assets/v2/images/kudos/ruby_gem.svg create mode 100644 app/assets/v2/images/kudos/ruby_on_rails_machine.svg create mode 100644 app/assets/v2/images/kudos/ruby_on_rails_master.svg create mode 100644 app/assets/v2/images/kudos/scirbe_color.svg create mode 100644 app/assets/v2/images/kudos/shill_colorado.svg create mode 100644 app/assets/v2/images/kudos/shill_ethereum.svg create mode 100644 app/assets/v2/images/kudos/shillin_like_a_villian.svg create mode 100644 app/assets/v2/images/kudos/shillville.svg create mode 100644 app/assets/v2/images/kudos/social_first.svg create mode 100644 app/assets/v2/images/kudos/social_runner up.svg create mode 100644 app/assets/v2/images/kudos/social_runner_up.svg create mode 100644 app/assets/v2/images/kudos/sociall_first.svg create mode 100644 app/assets/v2/images/kudos/struck_oil.svg create mode 100644 app/assets/v2/images/kudos/subscription_color.svg create mode 100644 app/assets/v2/images/kudos/sunburst.svg create mode 100644 app/assets/v2/images/kudos/super_juggler.svg create mode 100644 app/assets/v2/images/kudos/sustainer.svg create mode 100644 app/assets/v2/images/kudos/tools.svg create mode 100644 app/assets/v2/images/kudos/travel_first.svg create mode 100644 app/assets/v2/images/kudos/travel_runner up.svg create mode 100644 app/assets/v2/images/kudos/travel_runner_up.svg create mode 100644 app/assets/v2/images/kudos/unix_philosophy.svg create mode 100644 app/assets/v2/images/kudos/vitalik.svg create mode 100644 app/assets/v2/images/kudos/vitalik_genesis.svg create mode 100644 app/assets/v2/images/kudos/volunteer_color.svg create mode 100644 app/assets/v2/images/kudos/wallet_color.svg create mode 100644 app/assets/v2/images/kudos/west.svg create mode 100644 app/assets/v2/images/kudos/wildcard.svg create mode 100644 app/assets/v2/images/top-bar/codefund-logo.svg create mode 100644 app/assets/v2/images/top-bar/codefund-symbol.svg create mode 100644 app/assets/v2/images/top-bar/gitcoin-logo.svg create mode 100644 app/assets/v2/images/top-bar/gitcoin-symbol.svg create mode 100644 app/assets/v2/images/top-bar/grants-logo.svg create mode 100644 app/assets/v2/images/top-bar/grants-symbol.svg create mode 100644 app/assets/v2/images/top-bar/kudos-logo.svg create mode 100644 app/assets/v2/images/top-bar/kudos-symbol.svg create mode 100644 app/assets/v2/js/ajax-helper.js create mode 100644 app/assets/v2/js/bootstrap.min.js create mode 100644 app/assets/v2/js/eth-price.js create mode 100644 app/assets/v2/js/kudos-search.js create mode 100644 app/assets/v2/js/pages/kudos-search.js create mode 100644 app/assets/v2/js/pages/kudos_details.js create mode 100644 app/assets/v2/js/pages/kudos_receive.js create mode 100644 app/assets/v2/js/pages/kudos_send.js create mode 100644 app/assets/v2/js/popper.min.js create mode 100644 app/assets/v2/js/range-slider.js create mode 100644 app/assets/v2/js/tweenlite.js create mode 100644 app/dashboard/migrations/0110_auto_20181027_1727.py create mode 100644 app/dashboard/templates/shared/add_kudos.html create mode 100644 app/dashboard/templates/shared/profile_kudos.html create mode 100644 app/kudos/Kudos.json rename app/{assets/v2/js/pages/profile_details.js => kudos/__init__.py} (100%) create mode 100644 app/kudos/admin.py create mode 100644 app/kudos/forms.py create mode 100644 app/kudos/helpers.py create mode 100644 app/kudos/kudos.yaml create mode 100644 app/kudos/kudos_mainnet.yaml create mode 100644 app/kudos/kudos_test.yaml create mode 100644 app/kudos/management/commands/burn_kudos.py create mode 100644 app/kudos/management/commands/clone_kudos.py create mode 100644 app/kudos/management/commands/mint_all_kudos.py create mode 100644 app/kudos/management/commands/mint_kudos.py create mode 100644 app/kudos/management/commands/remove_kudos_orphans.py create mode 100644 app/kudos/management/commands/sync_kudos.py create mode 100644 app/kudos/management/commands/sync_kudos_listener.py create mode 100644 app/kudos/management/commands/update_kudos_metadata.py create mode 100644 app/kudos/migrations/0001_initial.py create mode 100644 app/kudos/migrations/__init__.py create mode 100644 app/kudos/models.py create mode 100644 app/kudos/router.py create mode 100644 app/kudos/templates/__init__.py create mode 100644 app/kudos/templates/kudos_about.html create mode 100644 app/kudos/templates/kudos_details.html create mode 100644 app/kudos/templates/kudos_marketplace.html create mode 100644 app/kudos/templates/kudos_mint.html create mode 100644 app/kudos/templates/shared/kudos_banner.html create mode 100644 app/kudos/templates/shared/kudos_card.html create mode 100644 app/kudos/templates/shared/kudos_card_profile.html create mode 100644 app/kudos/templates/shared/kudos_levitate.html create mode 100644 app/kudos/templates/shared/kudos_nav.html create mode 100644 app/kudos/templates/shared/kudos_searchbar.html create mode 100644 app/kudos/templates/transaction/base.html create mode 100644 app/kudos/templates/transaction/kudos_auth.html create mode 100644 app/kudos/templates/transaction/receive.html create mode 100644 app/kudos/templates/transaction/receive_legacy.html create mode 100644 app/kudos/templates/transaction/receive_v2.html create mode 100644 app/kudos/templates/transaction/send.html create mode 100644 app/kudos/templates/transaction/send1.html create mode 100644 app/kudos/templatetags/kudos_extras.py create mode 100644 app/kudos/test_models.py create mode 100644 app/kudos/test_utils.py create mode 100644 app/kudos/test_views.py create mode 100644 app/kudos/utils.py create mode 100644 app/kudos/views.py create mode 100644 app/retail/templates/emails/kudos_mint.html create mode 100644 app/retail/templates/emails/kudos_mkt.html create mode 100644 app/retail/templates/emails/new_kudos.html create mode 100644 app/retail/templates/emails/new_kudos.txt create mode 100644 app/retail/templates/shared/grants_nav.html create mode 100644 app/retail/templates/shared/top_nav.html create mode 100755 scripts/fresh_start.bash create mode 100644 scripts/sync_kudos_listener_local.bash create mode 100644 scripts/sync_kudos_local.bash diff --git a/.eslintignore b/.eslintignore index f7b71292d16..9c3e5d9d179 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,6 +5,8 @@ app/assets/v2/js/jquery*.js app/assets/v2/js/jsrender.js app/assets/v2/js/showdown.js app/assets/v2/js/tooltip.js +app/assets/v2/js/tweenlite.js +app/assets/v2/js/abi.js app/assets/onepager/js/confetti.js diff --git a/.gitignore b/.gitignore index a6026806d7b..75d447c3553 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ node_modules/ gcoin/ .cache/ webpack-stats.json +.sass-cache # Sensitive environment files .env diff --git a/.stylelintignore b/.stylelintignore index 09a572c74c2..c9d057feb60 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,2 +1,4 @@ app/assets/v2/css/jquery.select2.min.css app/assets/v2/css/bootstrap.min.css +app/assets/v2/js/tweenlite.js +app/assets/v2/js/abi.js diff --git a/app/app/context.py b/app/app/context.py index 5e375d2cb54..abbb964a883 100644 --- a/app/app/context.py +++ b/app/app/context.py @@ -23,6 +23,7 @@ from django.utils import timezone from dashboard.models import Tip +from kudos.models import KudosTransfer def insert_settings(request): @@ -75,7 +76,12 @@ def insert_settings(request): username__iexact=context['github_handle'], web3_type='v3', ).exclude(txid='') + context['unclaimed_kudos'] = KudosTransfer.objects.filter( + receive_txid='', username__iexact="@" + context['github_handle'], web3_type='v3', + ).exclude(txid='') + if not settings.DEBUG: context['unclaimed_tips'] = context['unclaimed_tips'].filter(network='mainnet') + context['unclaimed_kudos'] = context['unclaimed_kudos'].filter(network='mainnet') return context diff --git a/app/app/settings.py b/app/app/settings.py index 3a7a1c92511..80fd9de230a 100644 --- a/app/app/settings.py +++ b/app/app/settings.py @@ -27,6 +27,9 @@ import raven from easy_thumbnails.conf import Settings as easy_thumbnails_defaults +import warnings +warnings.filterwarnings("ignore", category=UserWarning, module='psycopg2') + root = environ.Path(__file__) - 2 # Set the base directory to two levels. env = environ.Env(DEBUG=(bool, False), ) # set default values and casting env.read_env(str(root.path('app/.env'))) # reading .env file @@ -101,6 +104,8 @@ 'external_bounties', 'dataviz', 'impersonate', + 'kudos', + 'django.contrib.postgres', 'bounty_requests' ] @@ -130,7 +135,7 @@ TEMPLATES = [{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': ['retail/templates/', 'external_bounties/templates/', 'dataviz/templates', ], + 'DIRS': ['retail/templates/', 'external_bounties/templates/', 'dataviz/templates', 'kudos/templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -489,6 +494,18 @@ SLACK_TOKEN = env('SLACK_TOKEN', default='') # TODO SLACK_WELCOMEBOT_TOKEN = env('SLACK_WELCOMEBOT_TOKEN', default='') # TODO +# OpenSea API +OPENSEA_API_KEY = env('OPENSEA_API_KEY', default='') + +# Kudos +KUDOS_OWNER_ACCOUNT = env('KUDOS_OWNER_ACCOUNT', default='0xD386793F1DB5F21609571C0164841E5eA2D33aD8') +KUDOS_PRIVATE_KEY = env('KUDOS_PRIVATE_KEY', default='') +KUDOS_CONTRACT_MAINNET = env('KUDOS_CONTRACT_MAINNET', default='0x2aea4add166ebf38b63d09a75de1a7b94aa24163') +KUDOS_CONTRACT_RINKEBY = env('KUDOS_CONTRACT_RINKEBY', default='0x4077ae95eec529d924571d00e81ecde104601ae8') +KUDOS_CONTRACT_ROPSTEN = env('KUDOS_CONTRACT_ROPSTEN', default='0xcd520707fc68d153283d518b29ada466f9091ea8') +KUDOS_CONTRACT_TESTRPC = env('KUDOS_CONTRACT_TESTRPC', default='0xe7bed272ee374e8116049d0a49737bdda86325b6') +KUDOS_NETWORK = env('KUDOS_NETWORK', default='localhost') + # Reporting Integrations MIXPANEL_TOKEN = env('MIXPANEL_TOKEN', default='') diff --git a/app/app/urls.py b/app/app/urls.py index c00ab594c29..1931a2c0edc 100644 --- a/app/app/urls.py +++ b/app/app/urls.py @@ -40,6 +40,7 @@ import faucet.views import gitcoinbot.views import healthcheck.views +import kudos.views import linkshortener.views import marketing.views import marketing.webhookviews @@ -48,21 +49,43 @@ import tdi.views from dashboard.router import router as dbrouter from external_bounties.router import router as ebrouter +from kudos.router import router as kdrouter from .sitemaps import sitemaps urlpatterns = [ path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'), + # kudos + path('kudos/', kudos.views.about, name='kudos_main'), + path('kudos/about/', kudos.views.about, name='kudos_about'), + path('kudos/marketplace/', kudos.views.marketplace, name='kudos_marketplace'), + path('kudos/mint/', kudos.views.mint, name='kudos_mint'), + path('kudos/send/', kudos.views.send_2, name='kudos_send'), + path('kudos/send/3/', kudos.views.send_3, name='kudos_send_3'), + path('kudos/send/4/', kudos.views.send_4, name='kudos_send_4'), + re_path(r'^lazy_load_kudos/$', dashboard.views.lazy_load_kudos, name='lazy_load_kudos'), + re_path(r'^kudos/receive/v3/(?P.*)/(?P.*)/(?P.*)?', kudos.views.receive, name='kudos_receive'), + re_path(r'^kudos/search/$', kudos.views.search, name='kudos_search'), + re_path( + r'^kudos/(?P
\w*)/(?P\d+)/(?P\w*)', + kudos.views.details_by_address_and_token_id, + name='kudos_details_by_address_and_token_id' + ), + re_path(r'^kudos/(?P\d+)/(?P\w*)', kudos.views.details, name='kudos_details'), + re_path(r'^kudos/address/(?P.*)', kudos.views.kudos_preferred_wallet, name='kudos_preferred_wallet'), + re_path(r'^dynamic/kudos/(?P\d+)/(?P\w*)', kudos.views.image, name='kudos_details'), + # api views url(r'^api/v0.1/profile/(.*)?/keywords', dashboard.views.profile_keywords, name='profile_keywords'), url(r'^api/v0.1/funding/save/?', dashboard.ios.save, name='save'), url(r'^api/v0.1/faucet/save/?', faucet.views.save_faucet, name='save_faucet'), url(r'^api/v0.1/', include(dbrouter.urls)), url(r'^api/v0.1/', include(ebrouter.urls)), - url(r'^actions/api/v0.1/', include(dbrouter.urls)), # same as active, but not cached in cloudfront + url(r'^api/v0.1/', include(kdrouter.urls)), + url(r'^actions/api/v0.1/', include(dbrouter.urls)), # same as active, but not cached in cluodfront url(r'^api/v0.1/users_search/', dashboard.views.get_users, name='users_search'), - + url(r'^api/v0.1/kudos_search/', dashboard.views.get_kudos, name='kudos_search'), # Health check endpoint re_path(r'^health/', include('health_check.urls')), re_path(r'^lbcheck/?', healthcheck.views.lbcheck, name='lbcheck'), @@ -252,6 +275,9 @@ # admin views re_path(r'^_administration/?', admin.site.urls, name='admin'), + path('_administration/email/new_kudos', retail.emails.new_kudos, name='new_kudos'), + path('_administration/email/kudos_mint', retail.emails.kudos_mint, name='kudos_mint'), + path('_administration/email/kudos_mkt', retail.emails.kudos_mkt, name='kudos_mkt'), path('_administration/email/new_bounty', retail.emails.new_bounty, name='admin_new_bounty'), path('_administration/email/roundup', retail.emails.roundup, name='roundup'), path('_administration/email/faucet_rejected', retail.emails.faucet_rejected, name='email_faucet_rejected'), diff --git a/app/assets/onepager/css/main.css b/app/assets/onepager/css/main.css index 027ab812193..b1a508455e7 100644 --- a/app/assets/onepager/css/main.css +++ b/app/assets/onepager/css/main.css @@ -20,30 +20,6 @@ body { background-attachment: fixed; } -body::after { - content: ''; - display: block; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: inherit; - opacity: 0; - z-index: 1; - background-color: #ffffff; - background-image: url('/static/onepager/images/overlay.png'), -moz-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)); - background-image: url('/static/onepager/images/overlay.png'), -webkit-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)); - background-image: url('/static/onepager/images/overlay.png'), -ms-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)); - background-image: url('/static/onepager/images/overlay.png'), linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)); - background-repeat: repeat, no-repeat; - background-size: 100px 100px, cover; - background-position: top left, center center; - -moz-transition: opacity 1.75s ease-out; - -webkit-transition: opacity 1.75s ease-out; - -ms-transition: opacity 1.75s ease-out; - transition: opacity 1.75s ease-out; -} - body.is-loading:after { opacity: 1; } diff --git a/app/assets/onepager/js/receive.js b/app/assets/onepager/js/receive.js index aa1a4ad21b2..f5b28e79065 100644 --- a/app/assets/onepager/js/receive.js +++ b/app/assets/onepager/js/receive.js @@ -25,7 +25,7 @@ window.onload = function() { } ipfs.catText(document.ipfs_key_to_secret, function(err, key2) { if (err) { - _alert('could not reach IPFS. please try again later.', 'error'); + _alert('Could not reach IPFS. please try again later.', 'error'); return; } document.priv_key = combine_secrets(key2, document.gitcoin_secret); diff --git a/app/assets/v2/css/base.css b/app/assets/v2/css/base.css index 78859cdb40e..7e83b948ff6 100644 --- a/app/assets/v2/css/base.css +++ b/app/assets/v2/css/base.css @@ -453,10 +453,6 @@ p a { color: #25e899; } -.btn:focus { - box-shadow: none; -} - .cta-green { background-color: var(--gc-green); text-align: center; diff --git a/app/assets/v2/css/buttons.css b/app/assets/v2/css/buttons.css index a135aa7bfb6..07b0e5ce9c5 100644 --- a/app/assets/v2/css/buttons.css +++ b/app/assets/v2/css/buttons.css @@ -60,16 +60,6 @@ box-shadow: inset 0 -3.25em 0 0 var(--hover); } -.slide { - --color: #8fc866; - --hover: #66c887; -} - -.slide:hover, -.slide:focus { - box-shadow: inset 6.5em 0 0 0 var(--hover); -} - .offset { --color: #19bc8b; --hover: #1973bc; diff --git a/app/assets/v2/css/gitcoin.css b/app/assets/v2/css/gitcoin.css index 84e62f2077f..e422355b866 100644 --- a/app/assets/v2/css/gitcoin.css +++ b/app/assets/v2/css/gitcoin.css @@ -399,6 +399,14 @@ div.button-pink { cursor: pointer; } +.gc-round-text-input { + height: 32px; + border: 1px solid #eee; + outline: none; + padding-left: 10px; + font-weight: 300; +} + .gc-border-black { border: 1px solid black !important; } @@ -407,16 +415,12 @@ div.button-pink { border: 1px solid #37ea9c !important; } -.gc-selected { - border: 1px solid #4ef6ad !important; +.gc-border-blue { + border-color: #0D0764; } -.gc-round-text-input { - height: 32px; - border: 1px solid #eee; - outline: none; - padding-left: 10px; - font-weight: 300; +.gc-selected { + border: 1px solid #4ef6ad !important; } .gc-round-text-form { @@ -467,10 +471,11 @@ div.button-pink { /* stylelint-disable-next-line */ font-family: 'Font Awesome 5 Free'; content: '\f107'; - font-size: 16px; + font-size: 1.2em; margin-right: auto; margin-top: auto; float: right; + font-weight: 600; } .accordion.active:after { @@ -554,17 +559,29 @@ div.button-pink { } } -/* AutoComplete */ -.select2-container .select2-selection--single { - height: 2.5rem !important +.nav-tabs .nav-line { + color: #4A4A4A; + border-width: 0px 0px 3px 0; +} +.nav-tabs .nav-line.active { + color: #0D0764; + border-color: #0D0764; + background-color: transparent; +} + +.border-transparent { + border-color: transparent; } +/* AutoComplete */ + .select2-results__option, .select2-search--dropdown .select2-search__field { font-size: 0.8rem } .select2-container--default .select2-selection--single { + height: 2.5rem !important; border-radius: 2px !important; border-color: black !important; } @@ -656,3 +673,32 @@ div.button-pink { } } /* TODO: End */ + +/* fallback for send tip navbar */ +.d-none { + display: none!important; +} + +@media (min-width: 768px) { + + .d-md-block { + display: block!important; + } + .d-md-flex { + display: -ms-flexbox!important; + display: flex!important; + } + .d-md-none { + display: none!important; + } +} + +.notification-dot { + background-color: #ef3427; + width: 0.5rem; + height: 0.5rem; + position: absolute; + top: 6px; + border-radius: 30px; + left: 6px; +} diff --git a/app/assets/v2/css/kudos/range-slider.scss b/app/assets/v2/css/kudos/range-slider.scss new file mode 100644 index 00000000000..edcf8f3fb7f --- /dev/null +++ b/app/assets/v2/css/kudos/range-slider.scss @@ -0,0 +1,37 @@ +$blue: #0D0764; + +[data-rangeslider] { + -webkit-appearance: none; + width: 100%; + height: 2px; + background: $blue; + outline: none; + margin: 1rem 0; + + &::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 18px; + height: 18px; + border-radius: 50px; + background: $blue; + cursor: pointer; + transition: .1s all linear; + } + + &:hover::-webkit-slider-thumb { + width: 22px; + height: 22px; + } + &:focus::-webkit-slider-thumb { + width: 26px; + height: 26px; + border-radius: 50px 50px 4px; + transform: rotate(45deg); + margin-bottom: 50px; + } + + &::-webkit-slider-runnable-track {} +} + + diff --git a/app/assets/v2/css/kudos/select2.bootstrap4.scss b/app/assets/v2/css/kudos/select2.bootstrap4.scss new file mode 100644 index 00000000000..cf676c426ae --- /dev/null +++ b/app/assets/v2/css/kudos/select2.bootstrap4.scss @@ -0,0 +1,68 @@ +$arrow-color: #6c757d; +$border-grey: #ced4da; + +.select2 { + width: 100%; +} + +.select2-container--bootstrap4 { + border: 1px solid #ced4da; + padding: 0.25em; + border-radius: .25rem; +} + +.select2-container--bootstrap4.select2-container--disabled { + background-color: #e9ecef; + opacity: 1; +} + +.select2-container--bootstrap4.select2-container--open .select2-selection .select2-selection__arrow b { + border-color: transparent transparent $arrow-color transparent; + border-width: 0 0.45rem 0.45rem 0.45rem; +} + +.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow { + position: absolute; + bottom: 0; + right: 0.375rem; + top: 0; + width: 0.85rem; +} + +.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b { + border-color: $arrow-color transparent transparent transparent; + border-style: solid; + border-width: 0.45rem 0.45rem 0 0.45rem; + height: 0; + left: 0; + position: absolute; + top: 0; + bottom: 0; + width: 0; + border-radius: 4px; + margin: auto; + } + + .select2-container--bootstrap4 .select2-search--dropdown .select2-search__field { + border-radius: 4px; + border: 1px solid #7777; + } + +.select2-container--open .select2-dropdown.select2-dropdown--below { + top: -3px; + left: -1px; + } + +.select2-container--open .select2-dropdown.select2-dropdown--above { + top: 1px; + left: -1px; + } + + .select2-container--bootstrap4 .select2-dropdown { + border-color: $border-grey; + } + + .select2-container--bootstrap4 .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; +} diff --git a/app/assets/v2/css/kudos/styles.css b/app/assets/v2/css/kudos/styles.css new file mode 100644 index 00000000000..0f3b368ce45 --- /dev/null +++ b/app/assets/v2/css/kudos/styles.css @@ -0,0 +1,578 @@ +.box-transaction { + max-width: 35rem; + margin: auto; + background: #fff; + z-index: 2; + position: relative; + padding: 1em 3em 3em 3em; } + +.transaction { + background-color: #0d023b; + background-image: -moz-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url("/static/v2/images/header-bg.png"); + background-image: -webkit-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url("/static/v2/images/header-bg.png"); + background-image: -ms-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url("/static/v2/images/header-bg.png"); + background-image: linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url("/static/v2/images/header-bg.png"); + background-repeat: no-repeat; + background-size: cover; + background-position: center center; + background-attachment: fixed; } + +.alert_msg { + top: 0px; + width: 100%; + z-index: 99999; + background-color: #f44336; + color: white; + position: fixed; + text-align: center; } + +.alert_msg.info { + background-color: #2196F3; } + +.line-back { + position: relative; + display: block; } + .line-back:before { + content: ''; + display: block; + position: absolute; + top: 50%; + left: -3em; + width: calc(100% + 6em); + height: 1px; + z-index: -1; + background: #c8cccf; } + +.copyright a { + color: white; } + +[data-rangeslider] { + -webkit-appearance: none; + width: 100%; + height: 2px; + background: #0D0764; + outline: none; + margin: 1rem 0; } + [data-rangeslider]::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 18px; + height: 18px; + border-radius: 50px; + background: #0D0764; + cursor: pointer; + transition: .1s all linear; } + [data-rangeslider]:hover::-webkit-slider-thumb { + width: 22px; + height: 22px; } + [data-rangeslider]:focus::-webkit-slider-thumb { + width: 26px; + height: 26px; + border-radius: 50px 50px 4px; + transform: rotate(45deg); + margin-bottom: 50px; } + +.select2 { + width: 100%; } + +.select2-container--bootstrap4 { + border: 1px solid #ced4da; + padding: 0.25em; + border-radius: .25rem; } + +.select2-container--bootstrap4.select2-container--disabled { + background-color: #e9ecef; + opacity: 1; } + +.select2-container--bootstrap4.select2-container--open .select2-selection .select2-selection__arrow b { + border-color: transparent transparent #6c757d transparent; + border-width: 0 0.45rem 0.45rem 0.45rem; } + +.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow { + position: absolute; + bottom: 0; + right: 0.375rem; + top: 0; + width: 0.85rem; } + +.select2-container--bootstrap4 .select2-selection--single .select2-selection__arrow b { + border-color: #6c757d transparent transparent transparent; + border-style: solid; + border-width: 0.45rem 0.45rem 0 0.45rem; + height: 0; + left: 0; + position: absolute; + top: 0; + bottom: 0; + width: 0; + border-radius: 4px; + margin: auto; } + +.select2-container--bootstrap4 .select2-search--dropdown .select2-search__field { + border-radius: 4px; + border: 1px solid #7777; } + +.select2-container--open .select2-dropdown.select2-dropdown--below { + top: -3px; + left: -1px; } + +.select2-container--open .select2-dropdown.select2-dropdown--above { + top: 1px; + left: -1px; } + +.select2-container--bootstrap4 .select2-dropdown { + border-color: #ced4da; } + +.select2-container--bootstrap4 .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.kd-card { + position: relative; } + .kd-card.ghost { + -webkit-filter: grayscale(1); + filter: grayscale(1); + opacity: 0.4; } + .kd-card.gold .img-thumbnail { + border-image: linear-gradient(to bottom, rgba(255, 193, 7, 0.5), rgba(169, 116, 21, 0.5)); + border-image-slice: 1; } + .kd-card .img-thumbnail { + width: 100%; + padding: 1.25rem 2.14rem; + transition: all linear .15s; } + .kd-card a:hover .img-thumbnail { + border-color: #3e00ff; + box-shadow: inset 0 0 0px 2px #3e00ff; } + .kd-card .kd-name { + font-weight: 300; + padding: 0.5em; } + header .kd-card .kd-name { + color: white; } + .kd-card .kd-price { + position: absolute; + top: 0; + right: 0; + padding: 0.5em; } + +.kd-date { + font-size: 1.1rem; + color: #43484d; } + +.kd-shadow { + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); } + +.kd-extended { + background: #fff; + border-radius: .25rem; + height: 100%; + overflow: hidden; } + .kd-extended:hover .content-hover, .kd-extended:active .content-hover, .kd-extended:focus .content-hover, .kd-extended:focus-within .content-hover { + display: flex; } + .kd-extended .img-thumbnail { + padding: 1.25rem 3.05rem; } + .kd-extended .kd-title { + font-size: 1.25rem; + padding: 0; } + +.kd-content { + font-size: 0.9rem; + padding: 1.3rem 2rem; } + .kd-content a { + color: #3e00ff; } + +.content-hover { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba(62, 0, 255, 0.8); + color: white; + padding: 1rem; + display: none; + overflow-y: auto; + flex-direction: column; } + .content-hover a { + color: white; + font-weight: 700; } + +.listing-kudo a { + color: #43484d; } + +.full-height { + min-height: 100vh; } + +.bg-dark-blue { + background-color: #0d023b; + color: white; } + +.bg-light-blue { + background-color: #3e00ff; + color: white; } + +.bg-cellarius { + background-color: #4D5858; } + +.lh-3 { + line-height: 3rem; } + +.cta-square { + display: flex; + width: 100%; + justify-content: center; + align-items: center; + border-radius: .25rem; + color: #fff; + background-color: #3e00ff; + font-size: 2em; } + .cta-square:after { + content: ' '; + padding-top: 100%; + display: table; } + .cta-square > div { + display: flex; + flex-direction: column; + padding: 0 0.6em 0; + line-height: 1.1; + align-self: stretch; + justify-content: space-evenly; } + .cta-square:hover { + color: rgba(255, 255, 255, 0.8); } + +#carouselkudos .carousel-inner { + width: 90%; + margin: auto; } + +.carousel-control-kudos .carousel-control-next, +.carousel-control-kudos .carousel-control-prev { + width: 3.3rem; + height: 3.3rem; + background: #0d023b; + top: 0; + bottom: 0; + margin: auto; + border-radius: 40px; } +.carousel-control-kudos .carousel-control-next-icon, +.carousel-control-kudos .carousel-control-prev-icon { + height: 34px; } +.carousel-control-kudos .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%0A%3Csvg width='19px' height='34px' viewBox='0 0 19 34' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3C!-- Generator: Sketch 50.2 %2855047%29 - http://www.bohemiancoding.com/sketch --%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cdefs%3E%3C/defs%3E%3Cg id='Symbols' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Headers/Header-%239' transform='translate%28-101.000000, -638.000000%29' fill='%23C1C1C1'%3E%3Cpath d='M116.89675,671.709 L101.58275,656.405 C100.80575,655.629 100.80575,654.371 101.58275,653.595 L116.89675,638.291 C117.28475,637.903 117.91475,637.903 118.30275,638.291 L119.70875,639.696 C120.09675,640.084 120.09675,640.713 119.70875,641.101 L106.50275,654.297 C106.11475,654.685 106.11475,655.315 106.50275,655.702 L119.70875,668.899 C120.09675,669.287 120.09675,669.916 119.70875,670.304 L118.30275,671.709 C117.91475,672.097 117.28475,672.097 116.89675,671.709' id='Icon'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); } +.carousel-control-kudos .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%0A%3Csvg width='19px' height='34px' viewBox='0 0 19 34' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3C!-- Generator: Sketch 50.2 %2855047%29 - http://www.bohemiancoding.com/sketch --%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cdefs%3E%3C/defs%3E%3Cg id='Symbols' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Headers/Header-%239' transform='translate%28-1320.000000, -638.000000%29' fill='%23C1C1C1'%3E%3Cpath d='M1335.89675,671.709 L1320.58275,656.405 C1319.80575,655.629 1319.80575,654.371 1320.58275,653.595 L1335.89675,638.291 C1336.28475,637.903 1336.91475,637.903 1337.30275,638.291 L1338.70875,639.696 C1339.09675,640.084 1339.09675,640.713 1338.70875,641.101 L1325.50275,654.297 C1325.11475,654.685 1325.11475,655.315 1325.50275,655.702 L1338.70875,668.899 C1339.09675,669.287 1339.09675,669.916 1338.70875,670.304 L1337.30275,671.709 C1336.91475,672.097 1336.28475,672.097 1335.89675,671.709' id='Icon' transform='translate%281329.499875, 655.000000%29 scale%28-1, 1%29 translate%28-1329.499875, -655.000000%29 '%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); } + +.wallet-popover { + max-width: 490px; } + +.wallets-list { + max-height: 140px; + overflow-y: auto; + background-color: #f3f3f3; } + +.wallets-list:empty { + display: none; } + +.btn-lightblue { + color: white; + background-color: var(--gc-blue); } + +.btn-orange { + background-color: #d38971; + color: white; + padding: .75rem 1.5rem; } + .btn-orange:hover { + color: white; + background-color: rgba(211, 137, 113, 0.9); } + +.hexagon { + background: red; + width: 10rem; + display: block; + margin: auto; + height: 11.56rem; + display: flex; + align-content: center; + justify-content: center; + align-items: center; + -webkit-clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%); + clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%); } + +a:hover #shape-hexagon { + animation-play-state: paused; } + +#shape-hexagon { + animation: rotation 5s linear infinite; + animation-fill-mode: none; + animation-direction: alternate; + animation-iteration-count: infinite; } + +@keyframes rotation { + 0% { + stroke: #0cc67f; + fill: rgba(12, 198, 127, 0.6); } + 15% { + stroke: #1e6ee2; + fill: rgba(30, 110, 226, 0.6); } + 30% { + stroke: #662d91; + fill: rgba(102, 45, 145, 0.6); } + 50% { + stroke: #018cb2; + fill: rgba(1, 140, 178, 0.6); } + 65% { + stroke: #e57418; + fill: rgba(229, 116, 24, 0.6); } + 85% { + stroke: #4d4d4d; + fill: rgba(77, 77, 77, 0.6); } + 100% { + stroke: #0044e0; + fill: rgba(0, 68, 224, 0.6); } } +.hexagon-group { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: auto; + font-size: 16px; + padding-bottom: 3em; + display: grid; + grid-template-columns: repeat(4, 1fr); } + .hexagon-group svg { + height: 16.8em; + width: 14.4em; } + .hexagon-group svg text { + font-size: 1.1em; } + .hexagon-group .paging-animation { + font-size: 14px; + margin: 0.8em; + margin-bottom: -3em; + perspective: 1000px; + position: relative; + height: 208px; } + .hexagon-group .paging-animation .faces { + transform-style: preserve-3d; + transition: all 0.5s linear; + width: 100%; + height: 100%; } + .hexagon-group .paging-animation .face { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + .hexagon-group .paging-animation .back { + display: block; + transform: rotateY(0.5turn); + box-sizing: border-box; } + .hexagon-group .paging-animation:hover .faces { + transform: rotateY(0.5turn); } + .hexagon-group .paging-animation:nth-child(1) { + color: #FF7200; + grid-column: 1/4; } + .hexagon-group .paging-animation:nth-child(2) { + color: #F9006C; + grid-column: 2/5; } + .hexagon-group .paging-animation:nth-child(3) { + color: #3E00FF; + grid-column: 1/4; } + .hexagon-group .paging-animation:nth-child(4) { + color: #0ECF7C; + grid-column: 2/5; } + .hexagon-group .paging-animation:nth-child(5) { + color: #7ED321; + grid-column: 1/4; } + .hexagon-group .paging-animation:nth-child(6) { + color: #8E2ABE; + grid-column: 2/5; } + .hexagon-group .paging-animation:nth-child(7) { + color: #43D0B0; + grid-column: 1/4; } + @media (min-width: 400px) { + .hexagon-group svg text { + font-size: 1.3em; } + .hexagon-group .paging-animation { + height: 260px; + font-size: 16px; } + .hexagon-group .paging-animation:nth-child(1) { + grid-column: 1/3; } + .hexagon-group .paging-animation:nth-child(2) { + grid-column: 2/4; } + .hexagon-group .paging-animation:nth-child(3) { + grid-column: 1/3; } + .hexagon-group .paging-animation:nth-child(4) { + grid-column: 3/5; } + .hexagon-group .paging-animation:nth-child(5) { + grid-column: 2/4; } + .hexagon-group .paging-animation:nth-child(6) { + grid-column: 1/3; } + .hexagon-group .paging-animation:nth-child(7) { + grid-column: 3/5; } } + @media (min-width: 800px) { + .hexagon-group { + grid-template-columns: repeat(8, 1fr); } + .hexagon-group .paging-animation:nth-child(1) { + grid-column: 1/3; } + .hexagon-group .paging-animation:nth-child(2) { + grid-column: 3/5; } + .hexagon-group .paging-animation:nth-child(3) { + grid-column: 5/7; } + .hexagon-group .paging-animation:nth-child(4) { + grid-column: 7/9; } + .hexagon-group .paging-animation:nth-child(5) { + grid-column: 2/4; } + .hexagon-group .paging-animation:nth-child(6) { + grid-column: 4/6; } + .hexagon-group .paging-animation:nth-child(7) { + grid-column: 6/8; } } + +.star-pulse { + animation: pulse-shadow .5s ease-out infinite; + animation-direction: alternate; + margin-left: -60px; + margin-top: 4rem; + top: 0; } + @media (max-width: 768px) { + .star-pulse { + right: -10px; + margin-top: 0; + width: 5rem; } } + +@keyframes pulse-shadow { + 0% { + transform: scale(0.98); + filter: drop-shadow(0px 0px 0px rgba(0, 0, 0, 0.9)); } + 100% { + transform: scale(1); + filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.5)); } } +.bg-hexa { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.187946429'%3E%3Cg transform='translate(-227.000000, -1170.000000)' stroke='%233E00FF' stroke-width='10'%3E%3Cg id='Group-5-Copy-7' transform='translate(294.737804, 1248.626588) rotate(-330.000000) translate(-294.737804, -1248.626588) translate(223.737804, 1186.126588)'%3E%3Cpolygon opacity='0.334877232' points='105.943991 0 35.3139974 0 9.09494702e-13 62.3980694 35.3139974 124.7941 105.943991 124.7941 141.259988 62.3980694'%3E%3C/polygon%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); + background-position: 2rem 2rem; + background-repeat: no-repeat; } + +.text-featured { + font-size: 1.7rem; } + +.badge-kudos { + background-color: #D8EAFF; + color: #4A4A4A; + border-radius: 2px; + text-decoration: none; } + +#world { + z-index: -1; } + +a.cellarius-partner:before { + content: ''; + position: absolute; + right: 1rem; + bottom: 3rem; + width: 16%; + height: 16%; + background-size: cover; + background: url("/static/v2/images/kudos/assets/cellarius-logo.svg"); + background-repeat: no-repeat; } + +.cellarius-badge { + right: 1rem; + bottom: 3rem; + width: 16%; + height: 16%; + background-size: cover; + background: url("/static/v2/images/kudos/assets/cellarius-logo.svg"); + background-repeat: no-repeat; + background-color: #fff; + border-radius: 50px; } + +.kudos-details__title { + font-weight: 200; + font-size: 3.2rem; + margin-bottom: 0; } + +.kudos-details__subtitle { + font-size: 1rem; + font-weight: 700; + color: #0D0764; + border-bottom: 1px solid #C8C8C8; + padding-bottom: 0.8rem; + margin-bottom: 1rem; } + +.kudos-details__price { + font-size: 1.5rem; + font-weight: 700; } + .kudos-details__price small { + font-size: 1.25rem; + font-weight: 600; + color: #4A4A4A; } + +.kudos-details__address { + color: #3E00FF; } + +.text-color_blue { + color: #0D0764; } + +.text-weight_semibold { + font-weight: 600; } + +.tooltip-kudos .title-tooltip { + text-align: left; + display: block; + font-size: 14px; + color: #0ECF7C; + font-weight: 600; + line-height: 1.5; } +.tooltip-kudos .tooltip-inner { + width: 300px; + background-color: #0D0764; + font-size: 12px; + padding: 1rem; + max-width: 240px; } + .tooltip-kudos .tooltip-inner table { + width: 100%; } + +.author-shape { + -webkit-clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); + clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); } + +#kudos-image, .kudos_levitate_container { + cursor: pointer; } + +#kudos-image.shake { + animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + perspective: 1000px; } + +@keyframes shake { + 10%, 90% { + transform: translate3d(-1px, 0, 0); } + 20%, 80% { + transform: translate3d(2px, 0, 0); } + 30%, 50%, 70% { + transform: translate3d(-4px, 0, 0); } + 40%, 60% { + transform: translate3d(4px, 0, 0); } } +.kudos_msg { + margin-top: -90px; + display: none; + position: relative; + background-color: #3e00ff; + border-radius: 10px; + color: white; + padding: 3px 10px; + margin-bottom: 20px; } + +.kudos_msg:after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + width: 0; + height: 0; + border: 20px solid transparent; + border-top-color: #3e00ff; + border-bottom: 0; + border-left: 0; + margin-left: -10px; + margin-bottom: -20px; } + +/*# sourceMappingURL=styles.css.map */ diff --git a/app/assets/v2/css/kudos/styles.css.map b/app/assets/v2/css/kudos/styles.css.map new file mode 100644 index 00000000000..68ff31d95ba --- /dev/null +++ b/app/assets/v2/css/kudos/styles.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["transaction.scss","range-slider.scss","select2.bootstrap4.scss","styles.scss"], +"names": [], +"file": "styles.css" +} \ No newline at end of file diff --git a/app/assets/v2/css/kudos/styles.scss b/app/assets/v2/css/kudos/styles.scss new file mode 100644 index 00000000000..d386992672a --- /dev/null +++ b/app/assets/v2/css/kudos/styles.scss @@ -0,0 +1,689 @@ +// VARS +$dark-blue: #0d023b; +$gc-blue: #3e00ff; +$bg-cellarius: #4D5858; + +@import 'transaction'; +@import 'range-slider'; +@import 'select2.bootstrap4'; + +// MIXINS +@mixin square() { + display: flex; + width: 100%; + justify-content: center; + align-items: center; + &:after { + content: ' '; + padding-top: 100%; + display: table; + } +} + +// CODE +.kd-card { + position: relative; + + &.ghost { + -webkit-filter: grayscale(1); + filter: grayscale(1); + opacity: 0.4; + } + + &.gold .img-thumbnail { + border-image: linear-gradient(to bottom, rgba(255, 193, 7, 0.5) , rgba(169, 116, 21, .5)); + border-image-slice: 1; + } + + .img-thumbnail { + width: 100%; + padding: 1.25rem 2.14rem; + transition: all linear .15s; + + } + + a:hover { + .img-thumbnail { + border-color: $gc-blue; + box-shadow: inset 0 0 0px 2px $gc-blue; + } + } + + .kd-name { + font-weight: 300; + padding: 0.5em; + + header & { + color: white; + } + } + + .kd-price { + position: absolute; + top: 0; + right: 0; + padding: 0.5em; + } +} + +.kd-date { + font-size: 1.1rem; + color: #43484d; +} + +.kd-shadow { + box-shadow: 1px 1px 2px rgba(0,0,0, 0.1); +} + +.kd-extended { + background: #fff; + border-radius: .25rem; + height: 100%; + overflow: hidden; + + &:hover, + &:active, + &:focus, + &:focus-within { + .content-hover { + display: flex; + } + } + + .img-thumbnail { + padding: 1.25rem 3.05rem; + } + + .kd-title { + font-size: 1.25rem; + padding: 0; + } +} + +.kd-content { + font-size: 0.9rem; + padding: 1.3rem 2rem; + + a { + color: #3e00ff; + } +} + +.content-hover { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background: rgba($gc-blue,.8); + color: white; + padding: 1rem; + display: none; + overflow-y:auto; + flex-direction: column; + // justify-content: space-between; + + a { + color: white; + font-weight: 700; + } +} + +.listing-kudo { + + a { + color: #43484d; + } +} + +// GENERAL +.full-height { + min-height: 100vh; +} + +.bg-dark-blue { + background-color: $dark-blue; + color: white; +} +.bg-light-blue { + background-color: $gc-blue; + color: white; +} + +.bg-cellarius { + background-color: $bg-cellarius; +} + +.lh-3 { + line-height: 3rem; +} + +.cta-square { + @include square; + border-radius: .25rem; + color: #fff; + background-color: $gc-blue; + font-size: 2em; + + > div { + display: flex; + flex-direction: column; + padding: 0 0.6em 0; + line-height: 1.1; + align-self: stretch; + justify-content: space-evenly; + } + + &:hover { + color:rgba(255,255,255, 0.8) + } +} + +#carouselkudos .carousel-inner { + width: 90%; + margin: auto; +} +.carousel-control-kudos { + .carousel-control-next, + .carousel-control-prev { + width: 3.3rem; + height: 3.3rem; + background: #0d023b; + top: 0; + bottom: 0; + margin: auto; + border-radius: 40px; + } + + .carousel-control-next-icon, + .carousel-control-prev-icon { + height: 34px; + } + .carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%0A%3Csvg width='19px' height='34px' viewBox='0 0 19 34' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3C!-- Generator: Sketch 50.2 %2855047%29 - http://www.bohemiancoding.com/sketch --%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cdefs%3E%3C/defs%3E%3Cg id='Symbols' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Headers/Header-%239' transform='translate%28-101.000000, -638.000000%29' fill='%23C1C1C1'%3E%3Cpath d='M116.89675,671.709 L101.58275,656.405 C100.80575,655.629 100.80575,654.371 101.58275,653.595 L116.89675,638.291 C117.28475,637.903 117.91475,637.903 118.30275,638.291 L119.70875,639.696 C120.09675,640.084 120.09675,640.713 119.70875,641.101 L106.50275,654.297 C106.11475,654.685 106.11475,655.315 106.50275,655.702 L119.70875,668.899 C120.09675,669.287 120.09675,669.916 119.70875,670.304 L118.30275,671.709 C117.91475,672.097 117.28475,672.097 116.89675,671.709' id='Icon'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); + } + .carousel-control-next-icon { + background-image: url("data:image/svg+xml,%0A%3Csvg width='19px' height='34px' viewBox='0 0 19 34' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3C!-- Generator: Sketch 50.2 %2855047%29 - http://www.bohemiancoding.com/sketch --%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cdefs%3E%3C/defs%3E%3Cg id='Symbols' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Headers/Header-%239' transform='translate%28-1320.000000, -638.000000%29' fill='%23C1C1C1'%3E%3Cpath d='M1335.89675,671.709 L1320.58275,656.405 C1319.80575,655.629 1319.80575,654.371 1320.58275,653.595 L1335.89675,638.291 C1336.28475,637.903 1336.91475,637.903 1337.30275,638.291 L1338.70875,639.696 C1339.09675,640.084 1339.09675,640.713 1338.70875,641.101 L1325.50275,654.297 C1325.11475,654.685 1325.11475,655.315 1325.50275,655.702 L1338.70875,668.899 C1339.09675,669.287 1339.09675,669.916 1338.70875,670.304 L1337.30275,671.709 C1336.91475,672.097 1336.28475,672.097 1335.89675,671.709' id='Icon' transform='translate%281329.499875, 655.000000%29 scale%28-1, 1%29 translate%28-1329.499875, -655.000000%29 '%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); + } +} + +.wallet-popover { + max-width: 490px; +} + +.wallets-list { + max-height: 140px; + overflow-y: auto; + // margin-top: 1rem; + background-color: #f3f3f3; +} + +.wallets-list:empty { + display: none; +} + +.btn-lightblue { + color: white; + background-color: var(--gc-blue); +} + +.btn-orange { + background-color: #d38971; + color: white; + padding: .75rem 1.5rem; + + &:hover { + color: white; + background-color: rgba(#d38971,0.9); + } +} + +.hexagon { + background: red; + width: 10rem; + display: block; + margin: auto; + height: 11.56rem; + display: flex; + align-content: center; + justify-content: center; + align-items: center; + -webkit-clip-path: polygon( + 50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25% + ); + + clip-path: polygon( + 50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25% + ); +} + + +#shape-hexagon { + // transition: all linear 1s; +} +a:hover { + #shape-hexagon { + animation-play-state: paused; + } +} + #shape-hexagon { + // stroke:red; + animation: rotation 5s linear infinite; + animation-fill-mode: none; + animation-direction: alternate; + animation-iteration-count: infinite; + + } + #svg-text { + + } + +@keyframes rotation { + // stroke-dasharray: 300 + 0% { + stroke:#0cc67f; + fill:rgba(#0cc67f,0.6); + } + 15% { + stroke:#1e6ee2; + fill:rgba(#1e6ee2,0.6); + } + 30% { + stroke:#662d91; + fill:rgba(#662d91,0.6); + } + 50% { + stroke:#018cb2; + fill:rgba(#018cb2,0.6); + } + 65% { + stroke:#e57418; + fill:rgba(#e57418,0.6); + } + 85% { + stroke:#4d4d4d; + fill:rgba(#4d4d4d,0.6); + } + 100% { + stroke:#0044e0; + fill:rgba(#0044e0,0.6); + } + // stroke:#1e6ee2; + // stroke:#662d91; + // stroke:#018cb2; + // stroke:#e57418; + // stroke:#4d4d4d; + // stroke:#0044e0; + // stroke-dasharray: 30 + // -webkit-transform: rotate(360deg); + // transform: rotate(360deg); +} + + + +.hexagon-group { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: auto; + font-size: 16px; + padding-bottom: 3em; + + display: grid; + grid-template-columns: repeat(4, 1fr); + + + + svg { + height: 16.8em; + width: 14.4em; + + text { + font-size: 1.1em; + } + } + + + .paging-animation { + font-size: 14px; + margin: 0.8em; + margin-bottom: -3em; + // width: 22%; + perspective: 1000px; + position: relative; + height: 208px; + + .faces { + transform-style: preserve-3d; + transition: all 0.5s linear; + width: 100%; + height: 100%; + + } + + .face { + position: absolute; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + } + + .back { + display: block; + transform: rotateY(0.5turn); + box-sizing: border-box; + + } + + &:hover .faces{ + transform: rotateY(0.5turn); + } + + &:nth-child(1) { + color: #FF7200; + grid-column: 1/4; + } + + &:nth-child(2) { + color: #F9006C; + grid-column: 2/5; + } + + &:nth-child(3) { + color: #3E00FF; + grid-column: 1/4; + } + + &:nth-child(4) { + color: #0ECF7C; + grid-column: 2/5; + } + + &:nth-child(5) { + color: #7ED321; + grid-column: 1/4; + } + + &:nth-child(6) { + color: #8E2ABE; + grid-column: 2/5; + } + + &:nth-child(7) { + color: #43D0B0; + grid-column: 1/4; + } + } + + @media(min-width: 400px) { + + svg text { + font-size: 1.3em; + } + .paging-animation { + height: 260px; + font-size: 16px; + + &:nth-child(1) { + grid-column: 1/3; + } + + &:nth-child(2) { + grid-column: 2/4; + } + + &:nth-child(3) { + grid-column: 1/3; + } + + &:nth-child(4) { + grid-column: 3/5; + } + + &:nth-child(5) { + grid-column: 2/4; + } + + &:nth-child(6) { + grid-column: 1/3; + } + + &:nth-child(7) { + grid-column: 3/5; + } + } + } + + @media(min-width: 800px) { + grid-template-columns: repeat(8, 1fr); + .paging-animation { + // font-size: 16px; + &:nth-child(1) { + grid-column: 1/3; + } + + &:nth-child(2) { + grid-column: 3/5; + } + + &:nth-child(3) { + grid-column: 5/7; + } + + &:nth-child(4) { + grid-column: 7/9; + } + + &:nth-child(5) { + grid-column: 2/4; + } + + &:nth-child(6) { + grid-column: 4/6; + } + + &:nth-child(7) { + grid-column: 6/8; + } + } + } + +} + + +.star-pulse { + animation: pulse-shadow .5s ease-out infinite; + animation-direction: alternate; + margin-left: -60px; + margin-top: 4rem; + top: 0; + + @media (max-width: 768px) { + right: -10px; + margin-top: 0; + width: 5rem; + } +} +@keyframes pulse-shadow { + 0% { + transform: scale(0.98); + filter: drop-shadow(0px 0px 0px rgba(0,0,0,0.9)); + } + + 100% { + transform: scale(1); + filter: drop-shadow(0px 5px 5px rgba(0,0,0,0.5)); + } +} + +.bg-hexa { + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.187946429'%3E%3Cg transform='translate(-227.000000, -1170.000000)' stroke='%233E00FF' stroke-width='10'%3E%3Cg id='Group-5-Copy-7' transform='translate(294.737804, 1248.626588) rotate(-330.000000) translate(-294.737804, -1248.626588) translate(223.737804, 1186.126588)'%3E%3Cpolygon opacity='0.334877232' points='105.943991 0 35.3139974 0 9.09494702e-13 62.3980694 35.3139974 124.7941 105.943991 124.7941 141.259988 62.3980694'%3E%3C/polygon%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); + background-position: 2rem 2rem; + background-repeat: no-repeat; +} + +.text-featured { + font-size: 1.7rem; +} + +.badge-kudos { + background-color: #D8EAFF; + color: #4A4A4A; + border-radius: 2px; + text-decoration: none; +} + +#world { + z-index: -1; +} + +a.cellarius-partner:before { + content: ''; + position: absolute; + right: 1rem; + bottom: 3rem; + width: 16%; + height: 16%; + background-size: cover; + background: url('/static/v2/images/kudos/assets/cellarius-logo.svg'); + background-repeat: no-repeat; +} + +.cellarius-badge { + right: 1rem; + bottom: 3rem; + width: 16%; + height: 16%; + background-size: cover; + background: url('/static/v2/images/kudos/assets/cellarius-logo.svg'); + background-repeat: no-repeat; + background-color: #fff; + border-radius:50px; +} + +// Kudos details +.kudos-details__title { + font-weight: 200; + font-size: 3.2rem; + margin-bottom: 0; +} + +.kudos-details__subtitle { + font-size: 1rem; + font-weight: 700; + color: #0D0764; + border-bottom: 1px solid #C8C8C8; + padding-bottom: 0.8rem; + margin-bottom: 1rem; +} + +.kudos-details__price { + font-size: 1.5rem; + font-weight: 700; + + small { + font-size: 1.25rem; + font-weight: 600; + color: #4A4A4A; + } +} + +.kudos-details__address { + color: #3E00FF; +} + +.text-color_blue { + color: #0D0764; +} + +.text-weight_semibold { + font-weight: 600; +} + +.tooltip-kudos { + .title-tooltip { + text-align: left; + display: block; + font-size: 14px; + color: #0ECF7C; + font-weight: 600; + line-height: 1.5; + + } + .tooltip-inner { + width: 300px; + background-color: #0D0764; + font-size: 12px; + padding: 1rem; + max-width: 240px; + + table { + width: 100%; + } + + } +} + +.author-shape { + -webkit-clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); +clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); +} + +// kudos detail animations +#kudos-image, .kudos_levitate_container{ + cursor: pointer; +} + +#kudos-image.shake{ + animation: shake 0.82s cubic-bezier(.36,.07,.19,.97) both; + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + perspective: 1000px; +} + +@keyframes shake { + 10%, 90% { + transform: translate3d(-1px, 0, 0); + } + + 20%, 80% { + transform: translate3d(2px, 0, 0); + } + + 30%, 50%, 70% { + transform: translate3d(-4px, 0, 0); + } + + 40%, 60% { + transform: translate3d(4px, 0, 0); + } +} + +.kudos_msg{ + margin-top: -90px; + display: none; + position: relative; + background-color: #3e00ff; + border-radius: 10px; + color: white; + padding: 3px 10px; + margin-bottom: 20px + +} + +.kudos_msg:after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + width: 0; + height: 0; + border: 20px solid transparent; + border-top-color: #3e00ff; + border-bottom: 0; + border-left: 0; + margin-left: -10px; + margin-bottom: -20px; +} diff --git a/app/assets/v2/css/kudos/transaction.scss b/app/assets/v2/css/kudos/transaction.scss new file mode 100644 index 00000000000..821b81f86bb --- /dev/null +++ b/app/assets/v2/css/kudos/transaction.scss @@ -0,0 +1,57 @@ +.box-transaction { + max-width: 35rem; + margin: auto; + background: #fff; + z-index: 2; + position: relative; + padding: 1em 3em 3em 3em; +} + +.transaction { + background-color: #0d023b; + background-image: -moz-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url('/static/v2/images/header-bg.png'); + background-image: -webkit-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url('/static/v2/images/header-bg.png'); + background-image: -ms-linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url('/static/v2/images/header-bg.png'); + background-image: linear-gradient(60deg, rgba(255, 165, 150, 0.5) 5%, rgba(0, 228, 255, 0.35)), url('/static/v2/images/header-bg.png'); + background-repeat: no-repeat; + background-size: cover; + background-position: center center; + background-attachment: fixed; +} + +.alert_msg { + top: 0px; + width: 100%; + z-index: 99999; + background-color: #f44336; + color: white; + position: fixed; + text-align: center; +} + +.alert_msg.info { + background-color: #2196F3; +} + +.line-back { + position: relative; + display: block; + + &:before { + content: ''; + display: block; + position: absolute; + top: 50%; + left: -3em; + width: calc(100% + 6em); + height: 1px; + z-index: -1; + background: #c8cccf; + } +} + +.copyright { + a { + color: white; + } +} \ No newline at end of file diff --git a/app/assets/v2/css/lib/typography.css b/app/assets/v2/css/lib/typography.css index 5d40aa7721e..87064aa0520 100644 --- a/app/assets/v2/css/lib/typography.css +++ b/app/assets/v2/css/lib/typography.css @@ -3,9 +3,45 @@ src: url('/static/v2/fonts/futura/font4.ttf')/* TTF file for CSS3 browsers */ } +/* muli-200 - latin */ @font-face { font-family: 'Muli'; - src: url('/static/v2/fonts/Muli/Regular.ttf'); + font-style: normal; + font-weight: 200; + src: local('Muli ExtraLight'), local('Muli-ExtraLight'), + url('/static/v2/fonts/muli/muli-v12-latin-200.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/static/v2/fonts/muli/muli-v12-latin-200.woff') format('woff'), /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + url('/static/v2/fonts/muli/muli-v12-latin-200.ttf') format('truetype'); +} +/* muli-regular - latin */ +@font-face { + font-family: 'Muli'; + font-style: normal; + font-weight: 400; + src: local('Muli Regular'), local('Muli-Regular'), + url('/static/v2/fonts/muli/muli-v12-latin-regular.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/static/v2/fonts/muli/muli-v12-latin-regular.woff') format('woff'), /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + url('/static/v2/fonts/muli/muli-v12-latin-regular.ttf') format('truetype'); +} +/* muli-600 - latin */ +@font-face { + font-family: 'Muli'; + font-style: normal; + font-weight: 600; + src: local('Muli SemiBold'), local('Muli-SemiBold'), + url('/static/v2/fonts/muli/muli-v12-latin-600.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/static/v2/fonts/muli/muli-v12-latin-600.woff') format('woff'), /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + url('/static/v2/fonts/muli/muli-v12-latin-600.ttf') format('truetype'); +} +/* muli-700 - latin */ +@font-face { + font-family: 'Muli'; + font-style: normal; + font-weight: 700; + src: local('Muli Bold'), local('Muli-Bold'), + url('/static/v2/fonts/muli/muli-v12-latin-700.woff2') format('woff2'), /* Chrome 26+, Opera 23+, Firefox 39+ */ + url('/static/v2/fonts/muli/muli-v12-latin-700.woff') format('woff'), /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ + url('/static/v2/fonts/muli/muli-v12-latin-700.ttf') format('truetype'); } .g-font-futura { diff --git a/app/assets/v2/css/rain.css b/app/assets/v2/css/rain.css index b1760be2b88..a30350b2269 100644 --- a/app/assets/v2/css/rain.css +++ b/app/assets/v2/css/rain.css @@ -25,10 +25,14 @@ display: none; } +.transaction .rain { + position: fixed; +} + @media (min-width: 768px) { .rain { display: block; - } + } } .rain:nth-of-type(3n+0) { @@ -45,10 +49,10 @@ .rain.grey { background: rgba(241,225,255,0.2); -} +} -.rain.purple { - background-color: rgba(13,7,100, 0.2); +.rain.purple { + background-color: rgba(13,7,100, 0.2); } @-webkit-keyframes rains-fall { diff --git a/app/assets/v2/css/select2-kudos.css b/app/assets/v2/css/select2-kudos.css new file mode 100644 index 00000000000..4340a144bdd --- /dev/null +++ b/app/assets/v2/css/select2-kudos.css @@ -0,0 +1,140 @@ +:root { + --arrow-color: #6c757d; + --border-grey: #ced4da; + --border-blue: #0D0764; +} + +.select2 { + width: 100%; +} + +.select2-container--kudos { + border: 1px solid #ced4da; + padding: 0.25em; + border-radius: .25rem; +} + +.select2-container--kudos.select2-container--disabled { + background-color: #e9ecef; + opacity: 1; +} + +.select2-container--kudos .select2-selection--single .select2-selection__arrow b { + border-color: var(--arrow-color) transparent transparent transparent; + border-style: solid; + border-width: 0.45rem 0.45rem 0 0.45rem; + height: 0; + left: 0; + /* margin-top: -0.125rem; */ + position: absolute; + top: 0; + bottom: 0; + width: 0; + border-radius: 4px; + margin: auto; +} + +.select2-container--kudos.select2-container--open .select2-selection .select2-selection__arrow b { + border-color: transparent transparent var(--arrow-color) transparent; + border-width: 0 0.45rem 0.45rem 0.45rem; +} + +.select2-container--kudos .select2-selection--single { + min-height: 28px; + height: auto; + display: flex; +} + +.select2-container--kudos .select2-selection__placeholder { + vertical-align: middle; +} + +.select2-container--kudos .select2-selection--single .select2-selection__arrow { + position: absolute; + bottom: 0; + right: 0.375rem; + top: 0; + width: 0.85rem; +} + +.select2-container--kudos .select2-search--dropdown .select2-search__field { + border-radius: 4px; + border: 1px solid #7777; +} + +.select2-container--open .select2-dropdown.select2-dropdown--below { + top: -3px; + left: -1px; +} + +.select2-container--open .select2-dropdown.select2-dropdown--above { + top: 1px; + left: -1px; +} + +.select2-container--kudos .select2-dropdown { + /* border-color: var(--border-grey); */ +} + +.select2-container--kudos .select2-results__options { + max-height: 300px; + overflow-y: auto; +} + +.select2-container--kudos .select2-results__option { + font-size: 12px; + padding: 9px 6px; +} + +.select2-container--kudos .select2-results__option--highlighted[aria-selected] { + background-color: #F2F6F9; +} + +.select2-container--kudos .select2-selection--single .select2-selection__rendered { + /* display: flex; + justify-content: space-between; + align-items: center; + flex-basis: 100%; */ +} + +.select2-container--kudos .select2-selection--single .select2-selection__clear { + /* order: 1; + font-size: 20px; + line-height: 1; */ + + position: absolute; + bottom: 0; + right: 0.375rem; + top: 0; + width: 0.85rem; + font-size: 20px; + z-index: 100; +} + +.gc-border-blue + .select2-container--kudos, +.select2-container--kudos > .select2-dropdown { + border-color: var(--border-blue); +} + + +.kudos-name { + font-weight: 600; + font-size: 14px; +} + +.kudos-description { + color: #9B9B9B; +} + +.kudos-search-result a.more{ + float: right; +} +.kudos-search-result img{ + /* width: 50px; */ + height: 50px; +} +.kudos-search-result.kudos-search-result-large img{ + /* width: 100px; */ + height: 100px; +} + diff --git a/app/assets/v2/css/top-nav.css b/app/assets/v2/css/top-nav.css new file mode 100644 index 00000000000..125d12cafa3 --- /dev/null +++ b/app/assets/v2/css/top-nav.css @@ -0,0 +1,69 @@ +.top-nav { + color: #9E9E9E; + display: flex; + flex-wrap: wrap; + flex-shrink: 0; + background: #0D023B; + justify-content: space-around; + border-bottom: 1px solid rgba(255,255,255,0.3); + padding: 0.5rem 0; + font-size: 1rem; + line-height: 1.5; +} + + +.top-nav a { + padding: 0.6rem 1rem; +} + +.top-nav .link { + text-decoration: none; + color: #9E9E9E; +} + + +.top-nav a img { + filter: grayscale(1); + opacity: 0.6; + transition: all 0.2s linear; + height: 60px; +} + +@media (min-width: 768px) { + .top-nav { + flex: 1 0 45px; + background: black; + flex-direction: row; + align-items: center; + justify-content: center; + border: none; + padding: 0; + } + + .top-nav a img { + height: auto; + } +} +.top-nav a:hover img, +.top-nav a.selected img { + /* opacity: 1; */ +} + +.top-nav a:hover img { + filter: grayscale(0); + opacity: 1; +} +.navbar-toggler[aria-expanded="true"] .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%0A%3Csvg width='30px' height='30px' viewBox='0 0 30 30' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3C!-- Generator: Sketch 51.2 (57519) - http://www.bohemiancoding.com/sketch --%3E%3Cdesc%3ECreated with Sketch.%3C/desc%3E%3Cdefs%3E%3C/defs%3E%3Cg id='Page-1' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Artboard' transform='translate(-146.000000, -156.000000)' fill-rule='nonzero'%3E%3Cg id='download' transform='translate(77.000000, 45.000000)'%3E%3Cpath d='M73,118 L95,134 M73,134 L95,118' id='Shape-Copy-2' stroke-opacity='0.5' stroke='%23FFFFFF' stroke-width='2' stroke-linecap='round'%3E%3C/path%3E%3Crect id='Path' x='69' y='111' width='30' height='30'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); +} + +.brand-hover .logo-animated { + display: none; +} +.brand-hover:hover .logo-animated { + display: block; +} +.brand-hover:hover .logo-static { + display: none; +} + diff --git a/app/assets/v2/fonts/Muli/Bold.ttf b/app/assets/v2/fonts/Muli/Bold.ttf deleted file mode 100755 index a1d70c4e962434c06b7505bd367ce0cdb722840c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52836 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