refactor: renamed app to school

This commit is contained in:
Jannat Patel
2021-10-11 20:31:27 +05:30
parent 13022e0bcc
commit d07dbcc50a
466 changed files with 2497 additions and 146 deletions

View File

View File

@@ -0,0 +1,49 @@
<div class="common-card-style">
<div class="certificate-content">
<img src="{{ logo }}" class="certificate-logo">
<div class="text-muted mt-18">
Completion Certificate
</div>
<div class="certificate-heading"> {{ course.title }} </div>
<div class="text-muted mt-18"> Awarded To </div>
<div class="certificate-heading"> {{ student.full_name }} </div> 
<div class="certificate-footer">
{% if certificate.issue_date %}
<div class="certificate-footer-item">
<div class="font-weight-bold">
{{ frappe.utils.format_date(certificate.issue_date, "medium") }}
</div>
<div>
Issue date
</div>
</div>
{% endif %}
{% if certificate.expiry_date %}
<div class="certificate-footer-item">
<div class="font-weight-bold">
{{ frappe.utils.format_date(certificate.expiry_date, "medium") }}
</div>
<div>
Expiry date
</div>
</div>
{% endif %}
{% if instructor.full_name %}
<div class="certificate-footer-item">
<div class="font-weight-bold">
{{ instructor.full_name }}
</div>
<div>
Instructor
</div>
</div>
{% endif %}
</div>
</div>
<div class="certificate-ribbon"></div>
</div>
<script src="/assets/school/js/html2canvas.js"></script>

View File

@@ -0,0 +1,18 @@
<h4>{{_("Set your Password")}}</h4>
<p>Dear {{ full_name }},</p>
<p>{{ _("") }}</p>
{% if update_password_link %}
<p>{{_("Please click on the following button to set your new password")}}:</p>
<p>
<button style="border: 1px solid #15c; padding: 4px; border-radius: 5px; background-color: white;">
<a href="{{ update_password_link }}" style="color: #15c; font-size: 12px; text-decoration:none;"
target="_blank">{{_("Update Password") }}</a>
</button>
</p>
{% endif %}
<p>{{_("Regards")}},<br>
{{ _("Team School") }}</p><br>

View File

@@ -0,0 +1,19 @@
<div>
{% set site_link = "<a href='" + site_url + "'>" + app_name + "</a>" %}
<p>{{ _("Hi {0},").format(first_name) }}</p>
<br>
<p>{{ _("The course {0} is now available on {1}.").format(frappe.bold(title), app_name) }}</p>
<br>
<p>Click on the link below to start learning.</p>
<p style="margin: 15px 0px;">
<a href="{{ course_link }}" rel="nofollow" class="btn btn-primary">{{ _("Start Learning") }}</a>
</p>
<br>
<p>
{{ _("You can also copy-paste following link in your browser") }}<br>
<a href="{{ course_link }}">{{ site_url }}{{ course_link }}</a>
</p>
<br>
<p>Thanks and Regards,</p>
<p>{{ app_name }}</p>
</div>

View File

@@ -0,0 +1,12 @@
{% for batch in batches %}
<h3> {{ batch }}</h3>
<div>
{% for message in batches[batch] %}
<div style="border: 1px solid #DBDBDB;padding: 10px; margin: 10px;">
<p> {{ frappe.utils.md_to_html(message.message) }} </p>
<p class="text-right">By {{message.author}}</p>
<div class="small text-muted text-right">{{ frappe.utils.format_datetime(message.creation, "medium") }}</div>
</div>
{% endfor %}
</div>
{% endfor %}

View File

@@ -0,0 +1,17 @@
<div>
{% set site_link = "<a href='" + site_url + "'>" + site_name + "</a>" %}
<p>{{_("Hi,")}}</p>
<p>{{_("Welcome to {0}!").format(site_name)}}</p>
<p>Click on the link below to complete your sign up and set a new password</p>
<p style="margin: 15px 0px;">
<a href="{{ signup_form_link }}" rel="nofollow" class="btn btn-primary">{{ _("Complete Sign Up") }}</a>
</p>
<br>
<p>
{{_("You can also copy-paste following link in your browser")}}<br>
<a href="{{ signup_form_link }}">{{ site_url }}{{ signup_form_link }}</a>
</p>
<br>
<p>Thanks and Regards,</p>
<p>{{site_name}}</p>
</div>

View File

@@ -0,0 +1,13 @@
<!-- <div style="border: 1px solid #DBDBDB; padding-bottom: 10px;">
<h6 style="padding-left: 10px;">{{ author }}</h6>
<hr style="border: 1px solid #DBDBDB;">
<div style="padding: 10px;">
{{ message }}
<div class="small text-muted text-right">{{ creation }}</div>
</div>
</div> -->
<p> {{ message }} </p>
<p class="text-right">By {{author}}</p>
<div class="small text-muted text-right">{{ creation }}</div>
<a href="courses/course?course={{course}}">Open Course</a>

View File

@@ -0,0 +1,9 @@
<div>
<p>Dear {{ member_name }},</p>
<br>
<p>You've applied to become a mentor for this course. Your request is currently under review.</p>
<p>If you are not any more interested to mentor the course {{ course }}, you can <a href="{{ course_url }}">cancel your application</a>.</p>
<br>
<p>Thanks and Regards,</p>
<p>Team School.</p>
</div>

View File

@@ -0,0 +1,8 @@
<div>
<p>Dear {{ member_name }},</p>
<br>
<p>Your request to join us as a mentor for the course {{ course }} has been {{ status }}.</p>
<br>
<p>Thanks and Regards,</p>
<p>Team School.</p>
</div>

View File

@@ -0,0 +1,10 @@
<div class="exercise">
<h3>Exercise {{exercise.index_label}}: {{ exercise.title }}</h3>
<div class="exercise-description">{{frappe.utils.md_to_html(exercise.description)}}</div>
{% set submission = exercise.get_user_submission() %}
<pre class="exercise" id="exercise-{{exercise.name}}"
data-last-submitted="{{ submission and submission.creation or '' }}" data-name="{{ exercise.name }}"
data-image='{{ (submission and submission.image or "") | tojson }}'><code class="language-joy">{{ submission.solution if submission else exercise.code }}</code></pre>
</div>

View File

@@ -0,0 +1,168 @@
<script type="text/javascript" src="/assets/frappe/node_modules/moment/min/moment-with-locales.min.js"></script>
<script type="text/javascript" src="/assets/frappe/node_modules/moment-timezone/builds/moment-timezone-with-data.min.js"></script>
<script type="text/javascript" src="/assets/frappe/js/frappe/utils/datetime.js"></script>
<script type="text/javascript">
// comment_when is failing because of this
if (!frappe.sys_defaults) {
frappe.sys_defaults = {}
}
</script>
<script type="text/javascript" src="{{ livecode_url }}/static/livecode.js"></script>
<script type="text/javascript" src="/assets/mon_school/js/livecode-files.js"></script>
<template id="livecode-template">
<div class="livecode-editor livecode-editor-inline">
<div class="row">
<div class="col-lg-8 col-md-6">
<div class="controls">
<button class="run">Run</button>
<div class="exercise-controls pull-right">
<span style="padding-right: 10px;"><span class="last-submitted human-time" data-timestamp=""></span></span>
<button class="submit btn-primary">Submit</button>
</div>
</div>
</div>
</div>
<div class="code-editor">
<div class="row">
<div class="col-lg-8 col-md-6">
<div class="code-wrapper">
<textarea class="code"></textarea>
</div>
</div>
<div class="col-lg-4 col-md-6 canvas-wrapper">
<div class="svg-image" width="300" height="300"></div>
<pre class="output"></pre>
</div>
</div>
</div>
</div>
</template>
<script type="text/javascript">
function getLiveCodeOptions() {
return {
base_url: "{{ livecode_url }}",
runtime: "python",
files: LIVECODE_FILES, // loaded from livecode-files.js
command: ["python", "start.py"],
codemirror: true,
onMessage: {
image: function(editor, msg) {
const element = editor.parent.querySelector(".svg-image");
element.innerHTML = msg.image;
}
}
}
}
$(function() {
var editorLookup = {};
$("pre.example, pre.exercise").each((i, e) => {
var code = $(e).text();
var template = document.querySelector('#livecode-template');
var clone = template.content.cloneNode(true);
$(e)
.wrap('<div></div>')
.hide()
.parent()
.append(clone)
.find("textarea.code")
.val(code);
if ($(e).hasClass("exercise")) {
var last_submitted = $(e).data("last-submitted");
if (last_submitted) {
$(e).parent().find(".last-submitted")
.data("timestamp", last_submitted)
.html(__("Submitted {0}", [comment_when(last_submitted)]));
}
}
else {
$(e).parent().find(".exercise-controls").remove();
}
var editor = new LiveCodeEditor(e.parentElement, {
...getLiveCodeOptions(),
codemirror: true,
onMessage: {
image: function(editor, msg) {
const canvasElement = editor.parent.querySelector("div.svg-image");
canvasElement.innerHTML = msg.image;
}
}
});
$(e).parent().find(".submit").on('click', function() {
var name = $(e).data("name");
let code = editor.codemirror.doc.getValue();
frappe.call("school.lms.api.submit_solution", {
"exercise": name,
"code": code
}).then(r => {
if (r.message.name) {
frappe.msgprint("Submitted successfully!");
let d = r.message.creation;
$(e).parent().find(".human-time").html(__("Submitted {0}", [comment_when(d)]));
}
});
});
});
$(".exercise-image").each((i, e) => {
var svg = JSON.parse($(e).data("image"));
$(e).html(svg);
});
$("pre.exercise").each((i, e) => {
var svg = JSON.parse($(e).data("image"));
$(e).parent().find(".svg-image").html(svg);
});
});
</script>
<style type="text/css">
.svg-image {
border: 5px solid #ddd;
position: relative;
z-index: 0;
width: 310px;
height: 310px;
}
.livecode-editor {
margin-bottom: 30px;
}
.livecode-editor-small .svg-image {
border: 5px solid #ddd;
position: relative;
z-index: 0;
width: 210px;
height: 210px;
}
/* work-in-progress styles for showing admonition */
.admonition {
border: 1px solid #aaa;
border-left: .5rem solid #888;
border-radius: .3em;
font-size: 0.9em;
margin: 1.5em 0;
padding: 0 0.5em;
}
.admonition-title {
padding: 0.5em 0px;
font-weight: bold;
padding-top:
}
</style>

View File

@@ -0,0 +1,8 @@
<link rel="stylesheet" href="{{ livecode_url }}/static/codemirror/lib/codemirror.css">
<script src="{{ livecode_url }}/static/codemirror/lib/codemirror.js"></script>
<script src="{{ livecode_url }}/static/codemirror/mode/python/python.js"></script>
<script src="{{ livecode_url }}/static/codemirror/keymap/sublime.js"></script>
<script src="{{ livecode_url }}/static/codemirror/addon/edit/matchbrackets.js"></script>
<script src="{{ livecode_url }}/static/codemirror/addon/comment/comment.js"></script>

View File

View File

@@ -0,0 +1,59 @@
<div id="quiz-title" class="course-home-headings">{{ quiz.title }}</div>
<div class="card-divider"></div>
<div class="mt-5">
<form id="quiz-form">
<div class="questions">
{% for question in quiz.questions %}
<div class="question {% if loop.index == 1 %} active-question {% else %} hide {% endif %}"
data-question="{{ question.question }}" data-multi="{{ question.multiple}}" data-qt-index="{{ loop.index }}">
<p>{{ frappe.utils.md_to_html(question.question) }}</p>
{% if question.multiple %}
<small class="font-weight-bold">Choose all answers that apply:</small>
{% else %}
<small class="font-weight-bold">Choose 1 answer:</small>
{% endif %}
<div class="card-divider"></div>
{% set options = [question.option_1, question.option_2, question.option_3, question.option_4] %}
{% for option in options %}
{% if option %}
<div class="custom-checkbox">
<label class="quiz-label">
<input class="option" value="{{ option | urlencode }}"
data-correct="{{ question['is_correct_' + loop.index | string] }}" {% if question.multiple %}
type="checkbox" {% else %} type="radio" name="{{ question.question | urlencode }}" {% endif %}>
<img class="empty-checkbox mr-3" />
<span class="label-area">{{ frappe.utils.md_to_html(option) }}</span>
</label>
</div>
{% set explanation = question['explanation_' + loop.index | string] %}
{% if explanation %}
<small class="explanation muted-text hide">{{ explanation }}</small>
{% endif %}
<div class="card-divider"></div>
{% endif %}
{% endfor %}
</div>
{% endfor %}
</div>
<div class="quiz-footer">
<span class="font-weight-bold"> <span class="current-question">1</span> of {{ quiz.questions | length }}</span>
<button class="btn btn-primary pull-right" id="check" disabled>Check</button>
<button class="btn btn-primary hide" id="next">Next</button>
<button class="btn btn-primary hide" id="summary">Summary</button>
<small id="submission-message" class="font-weight-bold hide"> Please join the course to submit the Quiz.</small>
</div>
<div class="button is-secondary pull-right hide" id="try-again">Try Again</div>
<h4 class="success-message"></h4>
<h5 class="score text-muted"></h5>
</form>
</div>