Merge pull request #152 from Zlash65/esoc

ESoC Enhancement - webpages, webform, doctype
This commit is contained in:
Zarrar
2018-04-03 16:48:25 +05:30
committed by GitHub
22 changed files with 2646 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
// Copyright (c) 2018, EOSSF and contributors
// For license information, please see license.txt
frappe.ui.form.on('ESoC Applicant', {
refresh: function(frm) {
}
});

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2018, EOSSF and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
from frappe import _
import frappe
from frappe.model.document import Document
class ESoCApplicant(Document):
def validate(self):
self.validate_dob()
self.validate_email_type(self.email_id)
self.validate_agreement_check()
def validate_email_type(self, email):
from frappe.utils import validate_email_add
validate_email_add(email.strip(), True)
def validate_dob(self):
from frappe.utils import now_datetime, getdate
today = now_datetime().date()
if getdate(self.date_of_birth) >= today:
frappe.throw(_("Invalid Date of Birth."))
def validate_agreement_check(self):
from frappe.utils import cint
if not cint(self.terms_and_conditions):
frappe.throw(_("You must agree to the terms and consitions."))

View File

@@ -0,0 +1,23 @@
/* eslint-disable */
// rename this file from _test_[name] to test_[name] to activate
// and remove above this line
QUnit.test("test: ESoC Applicant", function (assert) {
let done = assert.async();
// number of asserts
assert.expect(1);
frappe.run_serially([
// insert a new ESoC Applicant
() => frappe.tests.make('ESoC Applicant', [
// values to be set
{key: 'value'}
]),
() => {
assert.equal(cur_frm.doc.key, 'value');
},
() => done()
]);
});

View File

@@ -0,0 +1,8 @@
from __future__ import unicode_literals
from frappe import _
import frappe
import unittest
class TestESoCApplicant(unittest.TestCase):
def validate(self):
frappe.throw(_("Test Exception"))

View File

@@ -0,0 +1,104 @@
{
"allow_copy": 0,
"allow_guest_to_view": 0,
"allow_import": 0,
"allow_rename": 0,
"beta": 0,
"creation": "2018-03-26 17:12:17.947914",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"editable_grid": 1,
"engine": "InnoDB",
"fields": [
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "project",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Project",
"length": 0,
"no_copy": 0,
"options": "Accounting App\nTimesheet\nCRM\nPOS\nAgriNext\nInventory\nSchools\nHealthcare",
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
},
{
"allow_bulk_edit": 0,
"allow_on_submit": 0,
"bold": 0,
"collapsible": 0,
"columns": 0,
"fieldname": "proposed_solution",
"fieldtype": "Text",
"hidden": 0,
"ignore_user_permissions": 0,
"ignore_xss_filter": 0,
"in_filter": 0,
"in_global_search": 0,
"in_list_view": 1,
"in_standard_filter": 0,
"label": "Proposed Solution",
"length": 0,
"no_copy": 0,
"permlevel": 0,
"precision": "",
"print_hide": 0,
"print_hide_if_no_value": 0,
"read_only": 0,
"remember_last_selected_value": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0,
"translatable": 0,
"unique": 0
}
],
"has_web_view": 0,
"hide_heading": 0,
"hide_toolbar": 0,
"idx": 0,
"image_view": 0,
"in_create": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"max_attachments": 0,
"modified": "2018-03-27 15:38:45.942966",
"modified_by": "Administrator",
"module": "ERPNext Foundation",
"name": "ESoC Project Detail",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,
"read_only": 0,
"read_only_onload": 0,
"show_name_in_global_search": 0,
"sort_field": "modified",
"sort_order": "DESC",
"track_changes": 1,
"track_seen": 0
}

View File

@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2018, EOSSF and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
class ESoCProjectDetail(Document):
pass

View File

@@ -0,0 +1,109 @@
page-content {
padding: 1rem 4rem;
}
@media screen and (min-width: 767px) {
.page-content {
padding: 1rem 8rem;
}
}
.page-header-actions-block {
display: none;
}
.button-primary {
font-size: 1em;
padding: 0.5rem 1.5rem;
color: #fff;
background: #7575ff;
border-right: 0;
border-left: 0;
border-top: 0;
}
.button-primary:hover {
color: white;
}
.form-control {
width: 90% !important;
}
.row:before,
.row:after {
display: table;
content: " ";
}
.row:after {
clear: both;
}
.row {
margin-right: -15px;
margin-left: -15px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
}
@media (min-width: 768px) {
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
float: left;
}
.col-sm-12 {
width: 100%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-1 {
width: 8.33333333%;
}
}
.heading-2 {
margin-bottom: -10px;
font-weight: 340;
}
.checkbox-inline label input {
margin-top: 0.4rem;
vertical-align: middle;
position: absolute;
}
.checkbox-inline label {
cursor: pointer !important;
}

View File

@@ -0,0 +1,35 @@
frappe.ready(function() {
let page = $(document);
page.find('.web-form-page div .text-right button')
.removeClass('btn-primary btn-sm')
.addClass('button-primary')
.empty().append("Apply");
// Minimize cancel grid
let grid_cancel = page.find('.web-form-grid-row td');
for (let i in grid_cancel) {
if (grid_cancel[i].style && grid_cancel[i].style.width == '8.3333%') {
grid_cancel[i].style.width = "1%";
}
}
// Add Section heading
$(`<h2 class="heading-2"> Candidate Detail </h2>`)
.insertBefore(page.find('.web-form-page .section').first());
$(`<h2 class="heading-2"> Education Detail </h2>`)
.insertBefore(page.find('.web-form-page .section:nth-child(3)'));
$(`<h2 class="heading-2"> Project Detail </h2>`)
.insertBefore(page.find('.web-form-page .section:nth-child(5)'));
// Make textarea's height adapt to content
page.find('textarea').css("height", "auto");
page.find('textarea').css("min-height", "100px");
// checkbox tweak
let x = page.find('div.checkbox');
x.removeClass('checkbox').addClass('checkbox-inline');
let y = page.find('div .checkbox-inline label');
$(`<a style="display: inline-block;" href="/esoc/terms-and-rules" target="_blank"> terms & rules </a>`)
.appendTo(y[0]);
})

View File

@@ -0,0 +1,281 @@
{
"accept_payment": 0,
"allow_comments": 0,
"allow_delete": 0,
"allow_edit": 0,
"allow_incomplete": 0,
"allow_multiple": 0,
"allow_print": 0,
"amount": 0.0,
"amount_based_on_field": 0,
"creation": "2018-03-27 14:58:13.838189",
"currency": "INR",
"doc_type": "ESoC Applicant",
"docstatus": 0,
"doctype": "Web Form",
"idx": 0,
"introduction_text": "",
"is_standard": 1,
"login_required": 0,
"max_attachment_size": 0,
"modified": "2018-04-03 11:26:06.421781",
"modified_by": "Administrator",
"module": "ERPNext Foundation",
"name": "apply-for-esoc",
"owner": "Administrator",
"payment_button_label": "Buy Now",
"published": 1,
"route": "apply-for-esoc",
"show_sidebar": 0,
"sidebar_items": [],
"success_message": "",
"success_url": "/esoc#timeline",
"title": "Apply for ESoC",
"web_form_fields": [
{
"fieldname": "username",
"fieldtype": "Data",
"hidden": 0,
"label": "Username",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "first_name",
"fieldtype": "Data",
"hidden": 0,
"label": "First Name",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "last_name",
"fieldtype": "Data",
"hidden": 0,
"label": "Last Name",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "mobile_no",
"fieldtype": "Data",
"hidden": 0,
"label": "Mobile No.",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "",
"fieldtype": "Column Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "email_id",
"fieldtype": "Data",
"hidden": 0,
"label": "Email ID",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "date_of_birth",
"fieldtype": "Date",
"hidden": 0,
"label": "Date of Birth",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "nationality",
"fieldtype": "Data",
"hidden": 0,
"label": "Nationality",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "gender",
"fieldtype": "Link",
"hidden": 0,
"label": "Gender",
"max_length": 0,
"max_value": 0,
"options": "Gender",
"read_only": 0,
"reqd": 0
},
{
"fieldname": "",
"fieldtype": "Section Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "university_name",
"fieldtype": "Data",
"hidden": 0,
"label": "University Name",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "university_city",
"fieldtype": "Data",
"hidden": 0,
"label": "University City",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "field_of_study",
"fieldtype": "Data",
"hidden": 0,
"label": "Field of Study",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "",
"fieldtype": "Column Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "college_name",
"fieldtype": "Data",
"hidden": 0,
"label": "College Name",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "university_country",
"fieldtype": "Data",
"hidden": 0,
"label": "University Country",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
},
{
"fieldname": "university_website",
"fieldtype": "Data",
"hidden": 0,
"label": "University Website",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "",
"fieldtype": "Section Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "project_description",
"fieldtype": "Text",
"hidden": 0,
"label": "Briefly describe the Projects you've worked on",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "",
"fieldtype": "Section Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "github_link",
"fieldtype": "Data",
"hidden": 0,
"label": "Your Github Link",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "",
"fieldtype": "Section Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "project_details",
"fieldtype": "Table",
"hidden": 0,
"label": "Project Details",
"max_length": 0,
"max_value": 0,
"options": "ESoC Project Detail",
"read_only": 0,
"reqd": 1
},
{
"fieldname": "",
"fieldtype": "Section Break",
"hidden": 0,
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 0
},
{
"fieldname": "terms_and_conditions",
"fieldtype": "Check",
"hidden": 0,
"label": "I agree with the ",
"max_length": 0,
"max_value": 0,
"read_only": 0,
"reqd": 1
}
]
}

View File

@@ -0,0 +1,7 @@
from __future__ import unicode_literals
import frappe
def get_context(context):
# do your magic here
pass

View File

@@ -8,6 +8,9 @@
</div>
<div class="right">
<ul class="menu list-unstyled">
<li class="menu-item">
<a href="/esoc" class="menu-links">ESOC</a>
</li>
<li class="menu-item">
<a href="/service-providers" class="menu-links">Services</a>
</li>

View File

View File

@@ -0,0 +1,62 @@
{% extends base_template_path %}
{% block hero %}{% endblock %}
{% block content %}
<link rel="stylesheet" href="index.css">
<section class="help-padding border-top-light">
<h1 class="header-1"> Get Started </h1>
<p class="intro text-light"> Spend your summer break writing code for an open source software project! </p>
<div class="row border-top">
<div class="col-sm-5">
<div class="column-padding">
<div>
<h2 class="text-center"> Prerequisites </h2>
</div>
<div class="list-points">
<ol>
<li>Must be at least 18 years old at time of registration.</li>
<li>Must be enrolled in or accepted into an accredited institution
including (but not necessarily limited to) colleges, universities,
masters programs, PhD programs and undergraduate programs as of
the ESoC Student Acceptance Date (April 23, 2018).
</li>
</ol>
</div>
<div class="text-center">
<a class="button button-secondary-small" href="/esoc#timeline"> View Timeline </a>
</div>
</div>
</div>
<div class="col-sm-1"></div>
<div class="col-sm-5">
<div class="column-padding">
<div>
<h2 class="text-center"> How to apply ? </h2>
</div>
<div class="list-points">
<ol>
<li> Registrations opens on April 1st and will stay open till April 14th. </li>
<li> Eligible students must obtain NOCs from their respective institutions. </li>
<li> Select the projects you’d like to work on and propose a solution for it. </li>
<li> Make sure you go through <a href="/esoc/terms-and-rules"> Terms & Rules </a>
to avoid confusion later.
</li>
<li> Send in your application! </li>
</ol>
</div>
<div class="text-center">
<a class="button button-primary-small" href="/apply-for-esoc"> Apply Now </a>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

View File

@@ -0,0 +1,449 @@
/* ----- general utilities ----- */
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.text-center {
text-align: center;
}
.text-right {
text-align: right;
}
.text-left {
text-align: left;
}
.border-top {
border-top: 1px solid #d1d8dd;
}
.border-top-light {
border-top: 1px solid #ebeff2;
}
.header-1 {
font-size: 2.5rem;
line-height: 1.025;
}
.text-light {
color: #6c7680;
}
.text-muted {
color: #8d99a6;
}
.gray-bg {
background-color: #fafbfc;
}
.text-medium {
font-size: 1.5rem;
}
.bottom-spacer {
margin-top: 2.5rem;
margin-bottom: 2.5rem;
}
.bold {
font-weight: bold;
}
.clearfix {
clear: both;
}
/* -------- BUTTON UTIL -------- */
.button {
padding: 1rem 1.5rem;
border-radius: 0.25em;
cursor: pointer;
transition: all 0.3s ease-out;
border-bottom: 3px solid rgba(0, 0, 0, 0.2);
text-decoration: none;
}
.button:hover {
text-decoration: none;
}
.button-primary {
font-size: 1.5em;
color: #fff;
background: #7575ff;
border-right: 0;
border-left: 0;
border-top: 0;
line-height: 3;
}
.button-primary:hover {
background: #5e5ec9;
color: #fff;
}
.button-primary-small {
color: #fff;
background: #7575ff;
border-right: 0;
border-left: 0;
border-top: 0;
padding: 0.45rem 1rem;
display: inline-block;
}
.button-primary-small:hover {
background: #5e5ec9;
color: #fff;
}
.button-secondary-small {
color: #6c7680;
background: #f0f4f7;
border-right: 0;
border-left: 0;
border-top: 0;
padding: 0.45rem 1rem;
}
.button-secondary-small:hover {
background: #d1d8dd;
color: #2e3338;
}
/* ------ BOOTSTRAP GRID ------ */
.row:before,
.row:after {
display: table;
content: " ";
}
.row:after {
clear: both;
}
.row {
margin-right: -15px;
margin-left: -15px;
}
.col-sm-1, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-7 {
position: relative;
min-height: 1px;
padding-right: 10px;
padding-left: 10px;
}
@media (min-width: 768px) {
.col-sm-1, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-7 {
float: left;
}
.col-sm-1 {
width: 8.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
}
/* ---------- General ---------- */
.intro {
font-size: 1.2em;
}
ul, ol{
padding-left: 20px;
}
/* ----------- INDEX ----------- */
.container {
width: 80%;
max-width: 1200px;
margin: 0 auto;
/* text-align: center; */
}
.tiny-content {
margin-bottom: 40px;
font-size: 15px;
}
.team-description img {
border-radius: 3px;
width: 100%;
padding-bottom: 0.5rem;
}
.team-description {
text-align: center;
margin-top: 30px;
margin-bottom: 20px;
}
.team-description a {
text-decoration: none;
}
.box {
padding: 1.5rem;
border: 1px solid #d1d8dd;
border-radius: 0.25em;
transition: background-color 0.3s ease-out;
}
.box:hover {
color: #000 !important;
background-color: #fafbfc;
cursor: pointer;
text-decoration: none;
}
.grid-of-four {
grid-gap: 2.5rem;
display: grid;
grid-template-columns: repeat(1, 1fr);
}
.align-list {
width: 70%;
font-size: 1.2rem;
margin-left:auto;
margin-right:auto;
}
@media screen and (min-width: 500px) {
.grid-of-four {
grid-template-columns: repeat(2, 1fr);
}
}
@media screen and (min-width: 767px) {
.grid-of-four {
grid-template-columns: repeat(3, 1fr);
}
}
@media screen and (min-width: 991px) {
.grid-of-four {
grid-template-columns: repeat(4, 1fr);
}
}
/* ------- Terms & Rules ------- */
.list-points .inner-ul {
list-style: none;
}
.list-points .inner-ul li:before {
content: "\2192";
color: #000;
}
/* --------- Timeline --------- */
.timeline ul {
padding: 10px 0;
}
.timeline ul li {
list-style-type: none;
position: relative;
width: 4px;
background-color: #d1d8dd;
margin: 0 auto;
padding-top: 35px;
}
.timeline ul li::after {
content: '';
position: absolute;
color: #d1d8dd;
left: 50%;
bottom: 0;
transform: translateX(-50%) translateY(-60%);
width: 15px;
height: 15px;
border-radius: 50%;
background: inherit;
}
.timeline ul li div {
position: relative;
bottom: 0;
width: 400px;
padding: 15px;
color: #000;
background: #fff;
border-style: solid;
border-color: #d1d8dd;
border-radius: 1rem;
}
.timeline ul li div::before {
content: '';
color: #d1d8dd;
position: absolute;
bottom: 7px;
width: 0;
height: 0;
border-style: solid;
}
.timeline ul li:nth-child(odd) div {
left: 45px;
}
.timeline ul li:nth-child(odd) div::before {
left: -16px;
border-width: 8px 16px 8px 0;
border-color: transparent #d1d8dd transparent transparent;
}
.timeline ul li:nth-child(even) div {
left: -439px;
}
.timeline ul li:nth-child(even) div::before {
right: -16px;
border-width: 8px 0 8px 16px;
border-color: transparent transparent transparent #d1d8dd;
}
time {
display: block;
font-size: 1.2rem;
font-weight: bold;
margin-bottom: 8px;
}
/* Timeline Effects */
.timeline ul li::after {
transition: background .5s ease-in-out;
}
.timeline ul li.in-view::after {
background: #8D99A6;
}
.timeline ul li div {
visibility: hidden;
opacity: 0;
transition: all .5s ease-in-out;
}
.timeline ul li:nth-child(odd) div {
transform: translate3d(200px, 0, 0);
}
.timeline ul li:nth-child(even) div {
transform: translate3d(-200px, 0, 0);
}
.timeline ul li.in-view div {
transform: none;
visibility: visible;
opacity: 1;
}
/* general media queries */
@media screen and (max-width: 900px) {
.timeline ul li div {
width: 250px;
}
.timeline ul li:nth-child(even) div {
left: -289px;
/*250+45-6*/
}
}
@media screen and (max-width: 600px) {
.timeline ul li {
margin-left: 20px;
}
.timeline ul li div {
width: calc(100vw - 91px);
}
.timeline ul li:nth-child(even) div {
left: 45px;
}
.timeline ul li:nth-child(even) div::before {
left: -15px;
border-width: 8px 16px 8px 0;
border-color: transparent #d1d8dd transparent transparent;
}
}
/* ------ section-padding ------ */
.section-padding {
padding: 2.5rem 1rem;
}
@media screen and (min-width: 767px) {
.section-padding {
padding: 6.5rem 1.5rem;
}
}
.help-padding h1 {
font-weight: 400;
}
.help-padding {
padding: 1rem 4rem !important;
}
@media screen and (min-width: 767px) {
.help-padding {
padding: 3rem 8rem !important;
}
}
.column-padding {
line-height: 2;
padding: 1rem 0rem !important;
font-size: 1rem;
}
@media screen and (min-width: 767px) {
.column-padding {
padding: 2rem 0rem !important;
}
}
.term-padding {
line-height: 2.5;
padding: 1rem 4rem !important;
font-size: 1em;
}
@media screen and (min-width: 767px) {
.term-padding {
padding: 3rem 10rem !important;
}
}
.why-apply-padding {
line-height: 2.5;
padding: 1rem 2rem !important;
font-size: 1em;
}
@media screen and (min-width: 767px) {
.why-apply-padding {
padding: 3rem 6rem !important;
}
}
/* ----------------------------- */

View File

@@ -0,0 +1,152 @@
{% extends base_template_path %}
{% block title %}ERPNext Summer of Code{% endblock %}
{% block hero %}{% endblock %}
{% block content %}
<script type="text/javascript" src="index.js"></script>
<section class='section-padding text-center border-top-light'>
<div class="container">
<h1 class="header-1">ERPNext Summer of Code</h1>
<p class='intro text-light'>
ERPNext Summer of Code is an initiative by the ERPNext Foundation, in similar lines to Google Summer of Code (GSoC) to help bring more young and budding developers in to the world of Open Source Software development.
Students will spend 3 months of their summer time working with ERPNext and contributing to open source development, all while earning a stipend!
ERPNext is the world’s top fully open source ERP system made by Frappe Technologies and backed by the ERPNext Foundation.
</p>
<a class="button button-primary" href="/esoc/get-started">Get Started</a>
</div>
</section>
<section class="section-padding gray-bg border-top-light">
<section id="timeline">
<div>
<h2 class="text-center"> Timeline </h2>
</div>
</section>
<section class="timeline">
<ul>
<li>
<div>
<time>April 3, 2018</time> Student Applications Open <br><br>
<a class="button button-primary-small" href="/apply-for-esoc">Students Apply Now</a>
</div>
</li>
<li>
<div>
<time>April 14, 2018</time> Student Applications Deadline
</div>
</li>
<li>
<div>
<time>April 15 - 23, 2018</time> Application Evaluation by Mentors
</div>
</li>
<li>
<div>
<time>April 23, 2018 (GSoC)</time> Student Projects Announcement
</div>
</li>
<li>
<div>
<time>April 23 - May 14, 2018</time> Know Your Community
</div>
</li>
<li>
<div>
<time>May 14 - August 6, 2018</time> Coding begins
</div>
</li>
<li>
<div>
<time>June 11 - 15, 2018</time> Evaluations Round 1
</div>
</li>
<li>
<div>
<time>July 9 -13, 2018</time> Evaluations Round 2
</div>
</li>
<li>
<div>
<time>August 6 - 14, 2018</time> Code Submissions and Final Evaluations
</div>
</li>
<li>
<div>
<time>August 6 - 14, 2018</time> Mentors Submit Final Evaluation
</div>
</li>
<li>
<div>
<time>August 22, 2018</time> Results Announced
</div>
</li>
</ul>
</section>
</section>
<section class="section-padding border-top-light">
<div class="container">
<h1 class="header-1 text-center"> Projects </h1>
<p class='intro text-light text-center'>
Build Open Source Mobile Apps based on Ionic Framework.
</p>
<div class="bottom-spacer grid-of-four">
<a class="box" href="https://github.com/frappe-apps/accounting" target="_blank">
<div class="bold text-muted"> Accounting App </div>
</a>
<a class="box" href="https://github.com/frappe-apps/crm" target="_blank">
<div class="bold text-muted"> CRM </div>
</a>
<a class="box" href="https://github.com/frappe-apps/pos" target="_blank">
<div class="bold text-muted"> POS </div>
</a>
<a class="box" href="https://github.com/frappe-apps/inventory" target="_blank">
<div class="bold text-muted"> Inventory </div>
</a>
</div>
</div>
</section>
<section class="why-apply-padding gray-bg border-top-light">
<div class="container">
<h1 class="header-1 text-center"> Why Apply? </h1>
<div class="align-list text-muted">
<ul>
<li>
Get experience working on real life projects.
</li>
<li>
Get mentored by some of the top developers in India.
</li>
<li>
Be a part of Open Source Communities.
</li>
<li>
Build your resume and increase your chances of getting a job.
</li>
<li>
Did not get into GSOC, don't worry, you will get a better experience here.
</li>
<li>
Earn a stipend of Rs 20,000 per month, on completing your tasks.
</li>
</ul>
</div>
<div class="text-center">
<a class="button button-primary" href="/apply-for-esoc"> Apply Now </a>
</div>
</div>
</section>
{% endblock %}

View File

@@ -0,0 +1,32 @@
(function($) {
'use strict';
// define variables
var items = document.querySelectorAll(".timeline li");
// check if an element is in viewport
function isElementInViewport(el) {
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.right <= (window.innerWidth || document.documentElement.clientWidth)
);
}
function callbackFunc() {
for (var i = 0; i < items.length; i++) {
if (isElementInViewport(items[i])) {
items[i].classList.add("in-view");
}
}
}
// listen for events
window.addEventListener("load", callbackFunc);
window.addEventListener("resize", callbackFunc);
window.addEventListener("scroll", callbackFunc);
})();

View File

@@ -0,0 +1,2 @@
def get_context(context):
pass

View File

@@ -0,0 +1,92 @@
{% extends base_template_path %}
{% block hero %}{% endblock %}
{% block content %}
<link rel="stylesheet" href="index.css">
<section class="border-top-light">
<div>
<div class="term-padding">
<div>
<h2 class="text-center"> Terms & Rules </h2>
</div>
<div class="list-points">
<ol>
<li> Frappe/ERPNext will have full authority of what you create. </li>
<li> The licensing will be determined by Frappe/ERPNext. </li>
<li> <strong>Indemnities:</strong> You will indemnify Frappe/ERPNext
and its affiliates, directors and employees against all liabilities,
damages, losses, costs, fees (including legal fees), and expenses
relating to any allegation or third-party legal proceeding to
the extent arising from:
<ul class="inner-ul">
<li> Your acts or omissions related to applying for and participating in the Program </li>
<li> Your Submissions violating any rights of any other person or entity or any obligation you may have with them. </li>
</ul>
</li>
<li> Not an Offer or Contract of Employment
<ul class="inner-ul">
<li> You acknowledge that your participation in the Program is voluntary. </li>
<li> You acknowledge that no confidential, fiduciary, agency or other
relationship or implied-in-fact contract now exists between you and
Frappe/ERPNext or the Organizations and that no such relationship is
established by your Submissions to the Program.
</li>
<li> You understand and agree that nothing in this Agreement may be construed
as an offer or contract of employment with either Frappe/ERPNext or any Organization.
</li>
</ul>
</li>
<li> <strong> Stipends: </strong> Frappe/ERPNext is not required to pay any stipends
to you if you breach this Agreement.
</li>
<li> You understand and agree that nothing in this Agreement may be construed as an offer
or contract of employment with either Frappe/ERPNext or any Organization.
<ul class="inner-ul">
<li> <strong> Assignment: </strong> You may not assign this Agreement or any part
of it without Frappe/ERPNext’s prior written consent. Frappe/ERPNext may assign
this Agreement or any part of it upon notification, which may be posted on the
Program Website or sent to the contact information you provided upon registration.
</li>
<li> <strong> No Waiver: </strong> Neither party will be treated as having waived
any rights by not exercising (or delaying the exercise of) any rights under
this Agreement.
</li>
<li> <strong> No Agency: </strong> This Agreement does not create any agency,
partnership, or joint venture between the parties.
</li>
<li> <strong> No Third-Party Beneficiaries </strong> This Agreement does not
confer any benefits on any third party unless it expressly states that it does.
</li>
<li> <strong> Amendments: </strong> Except as set forth in the Program Rules,
any amendment must be in writing, signed by both parties, and expressly
state that it is amending this Agreement.
</li>
<li> <strong> Entire Agreement: </strong> This Agreement sets out all terms agreed
between the parties and supersedes all other agreements between the parties
relating to its subject matter. In entering into this Agreement neither party
has relied on, and neither party will have any right or remedy based on, any
statement, representation or warranty (whether made negligently or innocently),
except those expressly set out in this Agreement.
</li>
<li> <strong> Severability: </strong> If any term (or part of a term) of this
Agreement is invalid, illegal or unenforceable, the rest of the Agreement
will remain in effect.
</li>
<li> <strong> Translations </strong> In the event of any discrepancy between the
English version of this Agreement and a translated version, the English
version will govern.
</li>
</ul>
</li>
</ol>
</div>
</div>
</div>
</section>
{% endblock %}