LIL-90 LIL-89 - Подгрузка и фильтрация курсов

remotes/origin/hasaccess
Vitaly Baev 8 years ago
parent 55ee199364
commit 5bed4a0379
  1. 2
      apps/course/templates/course/courses.html
  2. 2
      apps/course/templates/course/inclusion/category_items.html
  3. 1553
      web/build/js/app.js
  4. 35
      web/package-lock.json
  5. 1
      web/package.json
  6. 2
      web/src/js/app.js
  7. 44
      web/src/js/modules/courses.js

@ -35,7 +35,7 @@
</div> </div>
<div class="courses__load load"> <div class="courses__load load">
{% if page_obj.has_next %} {% if page_obj.has_next %}
<button class="load__btn btn" data-next-page-url="?page={{ page_obj.next_page_number }}">Подгрузить еще</button> <button class="load__btn btn" data-next-page-url="{% url 'courses' %}?page={{ page_obj.next_page_number }}">Подгрузить еще</button>
{% endif %} {% endif %}
</div> </div>
</div> </div>

@ -1,5 +1,5 @@
{% for category in category_items %} {% for category in category_items %}
<div class="select__option js-select-option"> <div class="select__option js-select-option" data-category-option data-category-url="{% url 'courses' %}?category={{ category.title }}">
<div class="select__title">{{ category.title }}</div> <div class="select__title">{{ category.title }}</div>
</div> </div>
{% endfor %} {% endfor %}

File diff suppressed because it is too large Load Diff

@ -5597,6 +5597,18 @@
"sntp": "1.0.9" "sntp": "1.0.9"
} }
}, },
"history": {
"version": "4.7.2",
"resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz",
"integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==",
"requires": {
"invariant": "2.2.2",
"loose-envify": "1.3.1",
"resolve-pathname": "2.2.0",
"value-equal": "0.4.0",
"warning": "3.0.0"
}
},
"hmac-drbg": { "hmac-drbg": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@ -5756,7 +5768,6 @@
"version": "2.2.2", "version": "2.2.2",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
"integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
"dev": true,
"requires": { "requires": {
"loose-envify": "1.3.1" "loose-envify": "1.3.1"
} }
@ -6151,8 +6162,7 @@
"js-tokens": { "js-tokens": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
"dev": true
}, },
"js-yaml": { "js-yaml": {
"version": "3.10.0", "version": "3.10.0",
@ -6780,7 +6790,6 @@
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
"dev": true,
"requires": { "requires": {
"js-tokens": "3.0.2" "js-tokens": "3.0.2"
} }
@ -8550,6 +8559,11 @@
"global-modules": "1.0.0" "global-modules": "1.0.0"
} }
}, },
"resolve-pathname": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz",
"integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg=="
},
"resolve-url": { "resolve-url": {
"version": "0.2.1", "version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@ -10098,6 +10112,11 @@
"resolved": "https://registry.npmjs.org/validator/-/validator-9.2.0.tgz", "resolved": "https://registry.npmjs.org/validator/-/validator-9.2.0.tgz",
"integrity": "sha512-6Ij4Eo0KM4LkR0d0IegOwluG5453uqT5QyF5SV5Ezvm8/zmkKI/L4eoraafZGlZPC9guLkwKzgypcw8VGWWnGA==" "integrity": "sha512-6Ij4Eo0KM4LkR0d0IegOwluG5453uqT5QyF5SV5Ezvm8/zmkKI/L4eoraafZGlZPC9guLkwKzgypcw8VGWWnGA=="
}, },
"value-equal": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
"integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw=="
},
"verror": { "verror": {
"version": "1.10.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
@ -10248,6 +10267,14 @@
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=",
"dev": true "dev": true
}, },
"warning": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
"requires": {
"loose-envify": "1.3.1"
}
},
"watchpack": { "watchpack": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz",

@ -44,6 +44,7 @@
"webpack": "^3.10.0" "webpack": "^3.10.0"
}, },
"dependencies": { "dependencies": {
"history": "^4.7.2",
"jquery": "^3.3.1", "jquery": "^3.3.1",
"owl.carousel": "^2.2.0", "owl.carousel": "^2.2.0",
"validator": "^9.2.0" "validator": "^9.2.0"

@ -10,3 +10,5 @@ import "./modules/select";
// import "./modules/datepicker"; // import "./modules/datepicker";
import "./modules/tabs"; import "./modules/tabs";
import "./modules/popup"; import "./modules/popup";
import "./modules/courses";

@ -1,39 +1,53 @@
import $ from 'jquery'; import $ from 'jquery';
import createHistory from 'history/createBrowserHistory';
// Создаем объект history API
const history = createHistory();
$(document).ready(function () { $(document).ready(function () {
// Обработчик кнопки "Подгрузить еще" // Обработчик кнопки "Подгрузить еще"
$('.courses__list').on('click', 'button.load__btn', function () { $('.courses').on('click', 'button.load__btn', function () {
load_courses($(this).attr('data-next-page-url'), $(this)); load_courses($(this).attr('data-next-page-url'), false);
}); });
// Обработчик выбора категории // Обработчик выбора категории
$('div.js-select-option[data-category-option]').on('click', function (e) { $('div.js-select-option[data-category-option]').on('click', function (e) {
e.preventDefault(); e.preventDefault();
load_courses($(this).attr('data-category-url'), null); history.replace($(this).attr('data-category-url'));
load_courses($(this).attr('data-category-url'), true);
}); });
}); });
function load_courses(coursesUrl, buttonElement) { function load_courses(coursesUrl, fromStart) {
if (buttonElement) { $('.courses__list').css('opacity', '0.9');
const buttonElement = $('.courses').find('button.load__btn');
if (!fromStart) {
buttonElement.addClass('loading'); buttonElement.addClass('loading');
} else {
$('.courses__list').css('opacity', '0.9');
} }
$.ajax(coursesUrl, { $.ajax(coursesUrl, {
method: 'GET', method: 'GET'
dataType: 'html',
}) })
.done(function (data) { .done(function (data) {
$('.courses__list').html(data); if (data.success === true) {
if (!fromStart) {
$('.courses__list').append(data.content);
} else {
$('.courses__list').html(data.content);
}
if (data.next_url) {
buttonElement.attr('data-next-page-url', data.next_url)
} else {
buttonElement.hide()
}
}
}) })
.fail(function (xhr) { .fail(function (xhr) {
if (buttonElement) {
buttonElement.removeClass('loading');
}
}) })
.always(function () { .always(function () {
if (!buttonElement) { $('.courses__list').css('opacity', '1');
$('.courses__list').css('opacity', '1'); if (buttonElement) {
buttonElement.removeClass('loading');
} }
}); });
} }
Loading…
Cancel
Save