diff --git a/app/app/urls.py b/app/app/urls.py index a8a7384b0b1..8afe60ea7b6 100644 --- a/app/app/urls.py +++ b/app/app/urls.py @@ -71,6 +71,7 @@ url(r'^explorer/?', dashboard.views.dashboard, name='explorer'), # action URLs + re_path(r'^bounty/quickstart/?', dashboard.views.quickstart, name='quickstart'), url(r'^bounty/new/?', dashboard.views.new_bounty, name='new_bounty'), url(r'^funding/new/?', dashboard.views.new_bounty, name='new_funding'), url(r'^new/?', dashboard.views.new_bounty, name='new_funding_short'), @@ -153,6 +154,9 @@ url(r'^sync/get_issue_details?', dashboard.helpers.issue_details, name='helpers_issue_details'), url(r'^sync/search_save?', dashboard.views.save_search, name='save_search'), + # modals + re_path(r'^modal/get_quickstart_video?', dashboard.views.get_quickstart_video, name='get_quickstart_video'), + # brochureware views url(r'^about/?', retail.views.about, name='about'), url(r'^mission/?', retail.views.mission, name='mission'), diff --git a/app/assets/v2/css/base.css b/app/assets/v2/css/base.css index 10a9c8f29ca..1a530aac526 100644 --- a/app/assets/v2/css/base.css +++ b/app/assets/v2/css/base.css @@ -524,21 +524,6 @@ input[type=text].loading { background-size: 30px; } -.blocking_error { - padding: 0 4em; - text-align: center; - margin: 100px auto; - max-width: 100%; -} - -.blocking_error img { - max-width: 150px; - filter: grayscale(80%); - -moz-filter: grayscale(80%); - -ms-filter: grayscale(80%); - -o-filter: grayscale(80%); -} - #no_metamask_error img { filter: grayscale(100%); -moz-filter: grayscale(100%); @@ -552,6 +537,10 @@ input[type=text].loading { padding: 0 2em; } +.submit_bounty #primary_form { + max-width: none; +} + .submit_bounty .select2-search, .fulfill_bounty .select2-search, .submit_bounty .select2-results__option, @@ -1168,6 +1157,26 @@ input.is-invalid { background: #FAFAFA !important; } +.submit-notification { + color: #fff; + font-family: 'Muli', sans-serif; + font-size: 10px !important; + min-height: 100px; +} + +.submit-notification h3 { + font-size: 20px !important; + text-transform: capitalize; +} + +.submit-notification a { + color: #FFF; +} + +.metamask-error { + background-color: #FF6700; +} + @media (max-width: 1350px) { .profile_details .tips li div.details { width: 300px; diff --git a/app/assets/v2/css/current_balance.css b/app/assets/v2/css/current_balance.css index f38e08e8583..754bdda7f92 100644 --- a/app/assets/v2/css/current_balance.css +++ b/app/assets/v2/css/current_balance.css @@ -6,6 +6,10 @@ color: #000000; } +.submit_bounty #upper_left { + height: 100%; +} + #upper_left i { border-radius: 100%; height: 30px; diff --git a/app/assets/v2/css/quickstart.css b/app/assets/v2/css/quickstart.css new file mode 100644 index 00000000000..25b505f8e04 --- /dev/null +++ b/app/assets/v2/css/quickstart.css @@ -0,0 +1,147 @@ +body.quickstart { + background: #f6f6f6; +} + +.quickstart .title { + color: #0d0764; + letter-spacing: 0; +} + +.quickstart .container-fluid.content { + margin-bottom: 13rem; +} + +.quickstart h4.title { + font-size: 2.75rem; +} + +.quickstart .dont-show { + text-align: right; + font-style: italic; + color: #4a4a4a; + width: 100%; +} + +.quickstart .dont-show .checkbox_container .filter-label { + display: inline; +} + +.quickstart ol, +.quickstart ul { + padding: 0; +} + +.quickstart .modal { + padding: 0; + line-height: 0; +} + +.quickstart iframe { + width: 100%; + min-height: 450px; +} + + +.steps-container { + background-color: #fff; +} + +.steps-container .image-container { + margin-top: 10rem; +} + +.steps-container a { + color: #3e00ff; +} + +.steps-list { + padding-left: 1.5rem !important; +} + +.steps-list p { + font-size: 1.1rem; + color: #4a4a4a +} + +.steps-list ol li { + color: #3d3d46; + list-style-type: none; + line-height: 2.5rem; + font-size: 1.1rem; +} + +.steps-list .action-footer { + justify-content: space-between; +} + +.action-footer .video-link { + width: 30%; +} + +.action-footer .btn { + border-radius: 2px; + background-color: #0c0763; + border-color: #0c0763; +} + +.tips-list { + border-left: #d7d7d7 2px solid; + padding-right: 0 !important; +} + +.tips-list ul li { + font-size: 0.95rem !important; + line-height: 2rem !important; +} + +.issuetypes-container { + background-color: #efefef; +} + +.issuetypes-container .subheading { + width: 100%; + color: #15003e; + text-transform: none; + letter-spacing: 0; +} + +.issuetypes-container h5 { + font-size: 1.1rem; + margin-top: 1rem; + flex: 1; + letter-spacing: 0; +} + +.issuetypes-container p { + font-size: 0.9rem; + line-height: 0.9rem; +} + +.notsuggested-container ol { + padding: 1rem 9rem; +} + +.notsuggested-container ol li { + list-style: none; + display: flex; + padding: 1rem 0; +} + +.notsuggested-container ol li span { + padding: 0rem 1rem; +} + +.notsuggested-container .orange-text { + color: #ff7200; +} + +@media screen and (max-width: 500px) { + iframe { + min-height: 200px; + } + + .notsuggested-container ol { + padding: 1rem 0; + } + +} \ No newline at end of file diff --git a/app/assets/v2/images/Lightbulb.svg b/app/assets/v2/images/Lightbulb.svg new file mode 100644 index 00000000000..c42c2aae8b4 --- /dev/null +++ b/app/assets/v2/images/Lightbulb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/metamask-color.svg b/app/assets/v2/images/metamask-color.svg new file mode 100644 index 00000000000..963c73efa67 --- /dev/null +++ b/app/assets/v2/images/metamask-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/metamask.svg b/app/assets/v2/images/metamask.svg index 66b1dd4a98c..11c26ffb8c0 100644 --- a/app/assets/v2/images/metamask.svg +++ b/app/assets/v2/images/metamask.svg @@ -1 +1 @@ - \ No newline at end of file + diff --git a/app/assets/v2/images/quickstart-box.svg b/app/assets/v2/images/quickstart-box.svg new file mode 100644 index 00000000000..bb8090e7a91 --- /dev/null +++ b/app/assets/v2/images/quickstart-box.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/bug-icon.svg b/app/assets/v2/images/quickstart-icons/bug-icon.svg new file mode 100644 index 00000000000..131c46dfe75 --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/bug-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/design-icon.svg b/app/assets/v2/images/quickstart-icons/design-icon.svg new file mode 100644 index 00000000000..4557bbe7fed --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/design-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/documentation-icon.svg b/app/assets/v2/images/quickstart-icons/documentation-icon.svg new file mode 100644 index 00000000000..47b1b17392e --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/documentation-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/feature-icon.svg b/app/assets/v2/images/quickstart-icons/feature-icon.svg new file mode 100644 index 00000000000..188ab58a5fd --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/feature-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/list-icon.svg b/app/assets/v2/images/quickstart-icons/list-icon.svg new file mode 100644 index 00000000000..f10014651f8 --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/list-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/newproduct-icon.svg b/app/assets/v2/images/quickstart-icons/newproduct-icon.svg new file mode 100644 index 00000000000..070abccecc8 --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/newproduct-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/other-icon.svg b/app/assets/v2/images/quickstart-icons/other-icon.svg new file mode 100644 index 00000000000..ca1e5fff7cb --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/other-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/review-icon.svg b/app/assets/v2/images/quickstart-icons/review-icon.svg new file mode 100644 index 00000000000..cd2065e0804 --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/review-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/images/quickstart-icons/upgrade-icon.svg b/app/assets/v2/images/quickstart-icons/upgrade-icon.svg new file mode 100644 index 00000000000..c33cb239e68 --- /dev/null +++ b/app/assets/v2/images/quickstart-icons/upgrade-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/assets/v2/js/pages/new_bounty.js b/app/assets/v2/js/pages/new_bounty.js index 4f5cdccc224..e4e76fffae2 100644 --- a/app/assets/v2/js/pages/new_bounty.js +++ b/app/assets/v2/js/pages/new_bounty.js @@ -2,6 +2,36 @@ /* eslint-disable nonblock-statement-body-position */ load_tokens(); +/* Check if quickstart page is to be shown */ +var localStorage; +var quickstartURL = document.location.origin + '/bounty/quickstart'; + +try { + localStorage = window.localStorage; +} catch (e) { + localStorage = {}; +} + +if (localStorage['quickstart_dontshow'] !== 'true' && + doShowQuickstart(document.referrer) && + doShowQuickstart(document.URL)) { + window.location = quickstartURL; +} + +function doShowQuickstart(url) { + var fundingURL = document.location.origin + '/funding/new\\?'; + var bountyURL = document.location.origin + '/bounty/new\\?'; + var blacklist = [ fundingURL, bountyURL, quickstartURL ]; + + for (var i = 0; i < blacklist.length; i++) { + if (url.match(blacklist[i])) { + return false; + } + } + + return true; +} + // Wait until page is loaded, then run the function $(document).ready(function() { // Load sidebar radio buttons from localStorage diff --git a/app/assets/v2/js/pages/quickstart.js b/app/assets/v2/js/pages/quickstart.js new file mode 100644 index 00000000000..6a22607eace --- /dev/null +++ b/app/assets/v2/js/pages/quickstart.js @@ -0,0 +1,29 @@ +var localStorage; + +try { + localStorage = window.localStorage; +} catch (e) { + localStorage = {}; +} + +$(document).ready(function() { + $(document).on('click', '.show_video', function(e) { + e.preventDefault(); + $('#video').remove(); + var url = '/modal/get_quickstart_video'; + + setTimeout(function() { + $.get(url, function(newHTML) { + $(newHTML).appendTo('body').modal(); + }); + }, 300); + }); + + $(document).on('change', '#dontshow', function(e) { + if ($(this)[0].checked) { + localStorage['quickstart_dontshow'] = true; + } else { + localStorage['quickstart_dontshow'] = false; + } + }); +}); diff --git a/app/assets/v2/js/shared.js b/app/assets/v2/js/shared.js index 4acd611f493..bda55a4c04f 100644 --- a/app/assets/v2/js/shared.js +++ b/app/assets/v2/js/shared.js @@ -570,19 +570,23 @@ var trigger_primary_form_web3_hooks = function() { if (typeof web3 == 'undefined') { $('#no_metamask_error').css('display', 'block'); $('#primary_form').addClass('hidden'); + $('#no_issue_error').css('display', 'none'); mixpanel_track_once('No Metamask Error', params); } else if (!web3.eth.coinbase) { $('#unlock_metamask_error').css('display', 'block'); $('#primary_form').addClass('hidden'); + $('#no_issue_error').css('display', 'none'); mixpanel_track_once('Unlock Metamask Error', params); } else if (is_zero_balance_not_okay && document.balance == 0) { $('#zero_balance_error').css('display', 'block'); $('#primary_form').addClass('hidden'); + $('#no_issue_error').css('display', 'none'); mixpanel_track_once('Zero Balance Metamask Error', params); } else { $('#zero_balance_error').css('display', 'none'); $('#unlock_metamask_error').css('display', 'none'); $('#no_metamask_error').css('display', 'none'); + $('#no_issue_error').css('display', 'block'); $('#primary_form').removeClass('hidden'); } } diff --git a/app/dashboard/templates/quickstart.html b/app/dashboard/templates/quickstart.html new file mode 100644 index 00000000000..df277832570 --- /dev/null +++ b/app/dashboard/templates/quickstart.html @@ -0,0 +1,164 @@ +{% comment %} + Copyright (C) 2018 Gitcoin Core + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +{% endcomment %} +{% load i18n static %} + + + + + {% include 'shared/head.html' %} + {% include 'shared/cards.html' %} + + + + + + {% include 'shared/tag_manager_2.html' %} +
+ {% include 'shared/nav.html' %} +
+
+
+
+

{% trans "Quickstart Guide" %}

+
+
+
+
+
+ + +
+ +
+
+
+
+
+
+ +
+
+
    +
  1. {% trans "1) Create a Github Issue, you'll need the issue URL" %}
  2. +
  3. {% trans "2) Select the type of issue to fund" %}
  4. +
  5. {% trans '3) Complete the form and press "Fund Issue"' %}
  6. +
  7. {% trans "4) Confirm the transaction in metamask" %}
  8. +
+

+ {% trans "Once confirmed on blockchain, your bounty is posted to Gitcoin! Wait for developers across the world to discover your bounty and start working on your issue." %} +

+ +
+
+
{% trans "Tips & Tricks" %}
+
    +
  • {% trans "Know what you're looking for." %}
  • +
  • {% trans "Set clear acceptance criteria." %}
  • +
  • {% trans "Set a reasonable timeframe." %}
  • +
  • {% trans "Pick a fair price." %}
  • +
  • {% trans "Documentation is Key." %}
  • +
  • {% trans "Leave Room for Error." %}
  • +
+

{% trans "Have fun! Meet new people!" %}

+ {% trans "See Developer Guide" %} +
+
+
+

{% trans "Other Repo Maintainers are funding these types of issues" %}

+
+ +
{% trans "NEW PRODUCT OR FEATURE" %}
+

{% trans "Build new product ideas or new features" %}

+
+
+ +
{% trans "FEATURE IMPROVEMENT" %}
+

{% trans "Iterate on the next set of features" %}

+
+
+ +
{% trans "BUG FIX" %}
+

{% trans "Find and fix bugs in your product" %}

+
+
+ +
{% trans "CODE REVIEW" %}
+

{% trans "Get help reviewing code" %}

+
+
+ +
{% trans "TECH UPGRADE" %}
+

{% trans "Frameworks, migrations, batches" %}

+
+
+ +
{% trans "DOCUMENTATION" %}
+

{% trans "Product documentation, set up instructions" %}

+
+
+ +
{% trans "DESIGN" %}
+

{% trans "Architecture, flows, wireframes, designs" %}

+
+
+ +
{% trans "OTHER" %}
+

{% trans "Ideas, discussions, contests, consulting" %}

+
+
+

{% blocktrans %}In our experience, the following are not good candidates for bounties:{% endblocktrans %}

+
    +
  1. + + {% trans "Core Architecture" %} +
  2. +
  3. + + {% blocktrans %}Anything that requires a high degree of situational awareness + of the product/mark fit (unless there is well documented material){% endblocktrans %} +
  4. +
  5. + + {% blocktrans %}Anything that requires privileged access (like SSH access, + prod private API key){% endblocktrans %} +
  6. +
+ {% trans "If you're unsure, please reach out to a Gitcoin Core Team member on" %} Slack +
+
+
+ + {% include 'shared/analytics.html' %} + {% include 'shared/footer_scripts.html' %} + {% include 'shared/rollbar.html' %} + {% include 'shared/footer.html' %} + + + + + + diff --git a/app/dashboard/templates/quickstart_video.html b/app/dashboard/templates/quickstart_video.html new file mode 100644 index 00000000000..a32f9978667 --- /dev/null +++ b/app/dashboard/templates/quickstart_video.html @@ -0,0 +1,21 @@ +{% comment %} + Copyright (C) 2018 Gitcoin Core + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +{% endcomment %} +{% load i18n static %} +
+ +
diff --git a/app/dashboard/templates/shared/no_issue_error.html b/app/dashboard/templates/shared/no_issue_error.html new file mode 100644 index 00000000000..f59fe89cbd3 --- /dev/null +++ b/app/dashboard/templates/shared/no_issue_error.html @@ -0,0 +1,33 @@ +{% comment %} + Copyright (C) 2018 Gitcoin Core + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +{% endcomment %} +{% load i18n static %} +
+
+
+

{% trans "Tips for Funding an Issue" %}

+

+

    +
  1. {% trans "Create an issue on Github so that we can reference the details of the issue." %}
  2. +
  3. {% trans "What to fund? A new feature, feature improvements, bug fixes, code review, design and more." %}
  4. +
+

+
+
+ +
+
+
diff --git a/app/dashboard/templates/shared/no_metamask_error.html b/app/dashboard/templates/shared/no_metamask_error.html index a07c3438c39..6ac7d490e40 100644 --- a/app/dashboard/templates/shared/no_metamask_error.html +++ b/app/dashboard/templates/shared/no_metamask_error.html @@ -15,22 +15,21 @@ along with this program. If not, see . {% endcomment %} {% load i18n static %} -