mirror of https://github.com/JohnHammond/CTFd.git
Merge pull request #1343 from CTFd/improved-page-select
* Changes page selection to be a select of pages. The page will be redirected to after a new page is selected.in-house-export-serialization
commit
c9d31b67aa
|
@ -74,6 +74,12 @@ export default () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(".page-select").change(function() {
|
||||||
|
let url = new URL(window.location);
|
||||||
|
url.searchParams.set("page", this.value);
|
||||||
|
window.location.href = url.toString();
|
||||||
|
});
|
||||||
|
|
||||||
makeSortableTables();
|
makeSortableTables();
|
||||||
$('[data-toggle="tooltip"]').tooltip();
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
});
|
});
|
||||||
|
|
|
@ -20,7 +20,7 @@ eval("\n\nvar _CTFd = _interopRequireDefault(__webpack_require__(/*! core/CTFd *
|
||||||
/***/ (function(module, exports, __webpack_require__) {
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
;
|
;
|
||||||
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! bootstrap/dist/js/bootstrap.bundle */ \"./node_modules/bootstrap/dist/js/bootstrap.bundle.js\");\n\nvar _utils = __webpack_require__(/*! core/utils */ \"./CTFd/themes/core/assets/js/utils.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = function _default() {\n // TODO: This is kind of a hack to mimic a React-like state construct.\n // It should be removed once we have a real front-end framework in place.\n (0, _jquery.default)(\":input\").each(function () {\n (0, _jquery.default)(this).data(\"initial\", (0, _jquery.default)(this).val());\n });\n (0, _jquery.default)(\".form-control\").bind({\n focus: function focus() {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n },\n blur: function blur() {\n if ((0, _jquery.default)(this).val() === \"\") {\n (0, _jquery.default)(this).removeClass(\"input-filled-valid\");\n }\n }\n });\n (0, _jquery.default)(\".modal\").on(\"show.bs.modal\", function (e) {\n (0, _jquery.default)(\".form-control\").each(function () {\n if ((0, _jquery.default)(this).val()) {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n }\n });\n });\n (0, _jquery.default)(function () {\n (0, _jquery.default)(\".form-control\").each(function () {\n if ((0, _jquery.default)(this).val()) {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n }\n });\n (0, _jquery.default)(\"tr[data-href]\").click(function () {\n var sel = getSelection().toString();\n\n if (!sel) {\n var href = (0, _jquery.default)(this).attr(\"data-href\");\n\n if (href) {\n window.location = href;\n }\n }\n\n return false;\n });\n (0, _jquery.default)(\"[data-checkbox]\").click(function (e) {\n if ((0, _jquery.default)(e.target).is(\"input[type=checkbox]\")) {\n e.stopImmediatePropagation();\n return;\n }\n\n var checkbox = (0, _jquery.default)(this).find(\"input[type=checkbox]\"); // Doing it this way with an event allows data-checkbox-all to work\n\n checkbox.click();\n e.stopImmediatePropagation();\n });\n (0, _jquery.default)(\"[data-checkbox-all]\").on(\"click change\", function (e) {\n var checked = (0, _jquery.default)(this).prop(\"checked\");\n var idx = (0, _jquery.default)(this).index() + 1;\n (0, _jquery.default)(this).closest(\"table\").find(\"tr td:nth-child(\".concat(idx, \") input[type=checkbox]\")).prop(\"checked\", checked);\n e.stopImmediatePropagation();\n });\n (0, _jquery.default)(\"tr[data-href] a, tr[data-href] button\").click(function (e) {\n // TODO: This is a hack to allow modal close buttons to work\n if (!(0, _jquery.default)(this).attr(\"data-dismiss\")) {\n e.stopPropagation();\n }\n });\n (0, _utils.makeSortableTables)();\n (0, _jquery.default)('[data-toggle=\"tooltip\"]').tooltip();\n });\n};\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./CTFd/themes/admin/assets/js/styles.js?");
|
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! bootstrap/dist/js/bootstrap.bundle */ \"./node_modules/bootstrap/dist/js/bootstrap.bundle.js\");\n\nvar _utils = __webpack_require__(/*! core/utils */ \"./CTFd/themes/core/assets/js/utils.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = function _default() {\n // TODO: This is kind of a hack to mimic a React-like state construct.\n // It should be removed once we have a real front-end framework in place.\n (0, _jquery.default)(\":input\").each(function () {\n (0, _jquery.default)(this).data(\"initial\", (0, _jquery.default)(this).val());\n });\n (0, _jquery.default)(\".form-control\").bind({\n focus: function focus() {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n },\n blur: function blur() {\n if ((0, _jquery.default)(this).val() === \"\") {\n (0, _jquery.default)(this).removeClass(\"input-filled-valid\");\n }\n }\n });\n (0, _jquery.default)(\".modal\").on(\"show.bs.modal\", function (e) {\n (0, _jquery.default)(\".form-control\").each(function () {\n if ((0, _jquery.default)(this).val()) {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n }\n });\n });\n (0, _jquery.default)(function () {\n (0, _jquery.default)(\".form-control\").each(function () {\n if ((0, _jquery.default)(this).val()) {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n }\n });\n (0, _jquery.default)(\"tr[data-href]\").click(function () {\n var sel = getSelection().toString();\n\n if (!sel) {\n var href = (0, _jquery.default)(this).attr(\"data-href\");\n\n if (href) {\n window.location = href;\n }\n }\n\n return false;\n });\n (0, _jquery.default)(\"[data-checkbox]\").click(function (e) {\n if ((0, _jquery.default)(e.target).is(\"input[type=checkbox]\")) {\n e.stopImmediatePropagation();\n return;\n }\n\n var checkbox = (0, _jquery.default)(this).find(\"input[type=checkbox]\"); // Doing it this way with an event allows data-checkbox-all to work\n\n checkbox.click();\n e.stopImmediatePropagation();\n });\n (0, _jquery.default)(\"[data-checkbox-all]\").on(\"click change\", function (e) {\n var checked = (0, _jquery.default)(this).prop(\"checked\");\n var idx = (0, _jquery.default)(this).index() + 1;\n (0, _jquery.default)(this).closest(\"table\").find(\"tr td:nth-child(\".concat(idx, \") input[type=checkbox]\")).prop(\"checked\", checked);\n e.stopImmediatePropagation();\n });\n (0, _jquery.default)(\"tr[data-href] a, tr[data-href] button\").click(function (e) {\n // TODO: This is a hack to allow modal close buttons to work\n if (!(0, _jquery.default)(this).attr(\"data-dismiss\")) {\n e.stopPropagation();\n }\n });\n (0, _jquery.default)(\".page-select\").change(function () {\n var url = new URL(window.location);\n url.searchParams.set(\"page\", this.value);\n window.location.href = url.toString();\n });\n (0, _utils.makeSortableTables)();\n (0, _jquery.default)('[data-toggle=\"tooltip\"]').tooltip();\n });\n};\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./CTFd/themes/admin/assets/js/styles.js?");
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -79,13 +79,11 @@
|
||||||
{% if curr_page != 1 %}
|
{% if curr_page != 1 %}
|
||||||
<a href="?page={{ curr_page - 1 }}"><<<</a>
|
<a href="?page={{ curr_page - 1 }}"><<<</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for page in range(1, page_count + 1) %}
|
<select class="page-select">
|
||||||
{% if curr_page != page %}
|
{% for page in range(1, page_count + 1) %}
|
||||||
<a href="?page={{ page }}">{{ page }}</a>
|
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
|
||||||
{% else %}
|
{% endfor %}
|
||||||
<b>{{ page }}</b>
|
</select>
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% if curr_page != page_count %}
|
{% if curr_page != page_count %}
|
||||||
<a href="?page={{ curr_page + 1 }}">>>></a>
|
<a href="?page={{ curr_page + 1 }}">>>></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -142,15 +142,17 @@
|
||||||
{% if pages > 1 %}
|
{% if pages > 1 %}
|
||||||
<div class="text-center">Page
|
<div class="text-center">Page
|
||||||
<br>
|
<br>
|
||||||
{% if curr_page != 1 %}<a href="{{ url_for('admin.teams_listing', page=curr_page - 1) }}"><<<</a>{% endif %}
|
{% if curr_page != 1 %}
|
||||||
{% for page in range(1, pages + 1) %}
|
<a href="{{ url_for('admin.teams_listing', page=curr_page - 1) }}"><<<</a>
|
||||||
{% if curr_page != page %}
|
{% endif %}
|
||||||
<a href="{{ url_for('admin.teams_listing', page=page) }}">{{ page }}</a>
|
<select class="page-select">
|
||||||
{% else %}
|
{% for page in range(1, pages + 1) %}
|
||||||
<b>{{ page }}</b>
|
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
|
||||||
{% endif %}
|
{% endfor %}
|
||||||
{% endfor %}
|
</select>
|
||||||
{% if curr_page != pages %}<a href="{{ url_for('admin.teams_listing', page=curr_page + 1) }}">>>></a>{% endif %}
|
{% if curr_page != pages %}
|
||||||
|
<a href="{{ url_for('admin.teams_listing', page=curr_page + 1) }}">>>></a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -154,15 +154,17 @@
|
||||||
{% if pages > 1 %}
|
{% if pages > 1 %}
|
||||||
<div class="text-center">Page
|
<div class="text-center">Page
|
||||||
<br>
|
<br>
|
||||||
{% if curr_page != 1 %}<a href="{{ url_for('admin.users_listing', page=curr_page - 1) }}"><<<</a>{% endif %}
|
{% if curr_page != 1 %}
|
||||||
{% for page in range(1, pages + 1) %}
|
<a href="{{ url_for('admin.users_listing', page=curr_page - 1) }}"><<<</a>
|
||||||
{% if curr_page != page %}
|
{% endif %}
|
||||||
<a href="{{ url_for('admin.users_listing', page=page) }}">{{ page }}</a>
|
<select class="page-select">
|
||||||
{% else %}
|
{% for page in range(1, pages + 1) %}
|
||||||
<b>{{ page }}</b>
|
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
|
||||||
{% endif %}
|
{% endfor %}
|
||||||
{% endfor %}
|
</select>
|
||||||
{% if curr_page != pages %}<a href="{{ url_for('admin.users_listing', page=curr_page + 1) }}">>>></a>{% endif %}
|
{% if curr_page != pages %}
|
||||||
|
<a href="{{ url_for('admin.users_listing', page=curr_page + 1) }}">>>></a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -27,5 +27,11 @@ export default () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(".page-select").change(function() {
|
||||||
|
let url = new URL(window.location);
|
||||||
|
url.searchParams.set("page", this.value);
|
||||||
|
window.location.href = url.toString();
|
||||||
|
});
|
||||||
|
|
||||||
$('[data-toggle="tooltip"]').tooltip();
|
$('[data-toggle="tooltip"]').tooltip();
|
||||||
};
|
};
|
||||||
|
|
|
@ -104,7 +104,7 @@ eval("\n\nvar _q = _interopRequireDefault(__webpack_require__(/*! q */ \"./node_
|
||||||
/***/ (function(module, exports, __webpack_require__) {
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
;
|
;
|
||||||
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! bootstrap/dist/js/bootstrap.bundle */ \"./node_modules/bootstrap/dist/js/bootstrap.bundle.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = function _default() {\n // TODO: This is kind of a hack to mimic a React-like state construct.\n // It should be removed once we have a real front-end framework in place.\n (0, _jquery.default)(\":input\").each(function () {\n (0, _jquery.default)(this).data(\"initial\", (0, _jquery.default)(this).val());\n });\n (0, _jquery.default)(\".form-control\").bind({\n focus: function focus() {\n (0, _jquery.default)(this).removeClass(\"input-filled-invalid\");\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n },\n blur: function blur() {\n if ((0, _jquery.default)(this).val() === \"\") {\n (0, _jquery.default)(this).removeClass(\"input-filled-invalid\");\n (0, _jquery.default)(this).removeClass(\"input-filled-valid\");\n }\n }\n });\n (0, _jquery.default)(\".form-control\").each(function () {\n if ((0, _jquery.default)(this).val()) {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n }\n });\n (0, _jquery.default)('[data-toggle=\"tooltip\"]').tooltip();\n};\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./CTFd/themes/core/assets/js/styles.js?");
|
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\n__webpack_require__(/*! bootstrap/dist/js/bootstrap.bundle */ \"./node_modules/bootstrap/dist/js/bootstrap.bundle.js\");\n\nvar _jquery = _interopRequireDefault(__webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _default = function _default() {\n // TODO: This is kind of a hack to mimic a React-like state construct.\n // It should be removed once we have a real front-end framework in place.\n (0, _jquery.default)(\":input\").each(function () {\n (0, _jquery.default)(this).data(\"initial\", (0, _jquery.default)(this).val());\n });\n (0, _jquery.default)(\".form-control\").bind({\n focus: function focus() {\n (0, _jquery.default)(this).removeClass(\"input-filled-invalid\");\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n },\n blur: function blur() {\n if ((0, _jquery.default)(this).val() === \"\") {\n (0, _jquery.default)(this).removeClass(\"input-filled-invalid\");\n (0, _jquery.default)(this).removeClass(\"input-filled-valid\");\n }\n }\n });\n (0, _jquery.default)(\".form-control\").each(function () {\n if ((0, _jquery.default)(this).val()) {\n (0, _jquery.default)(this).addClass(\"input-filled-valid\");\n }\n });\n (0, _jquery.default)(\".page-select\").change(function () {\n var url = new URL(window.location);\n url.searchParams.set(\"page\", this.value);\n window.location.href = url.toString();\n });\n (0, _jquery.default)('[data-toggle=\"tooltip\"]').tooltip();\n};\n\nexports.default = _default;\n\n//# sourceURL=webpack:///./CTFd/themes/core/assets/js/styles.js?");
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -80,13 +80,11 @@
|
||||||
<<<
|
<<<
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for page in range(1, pages + 1) %}
|
<select class="page-select">
|
||||||
{% if curr_page != page %}
|
{% for page in range(1, pages + 1) %}
|
||||||
<a href="{{ url_for('teams.listing', page=page) }}">{{ page }}</a>
|
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
|
||||||
{% else %}
|
{% endfor %}
|
||||||
<b>{{page}}</b>
|
</select>
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% if curr_page != pages %}
|
{% if curr_page != pages %}
|
||||||
<a href="{{ url_for('teams.listing', page=curr_page + 1) }}">
|
<a href="{{ url_for('teams.listing', page=curr_page + 1) }}">
|
||||||
>>>
|
>>>
|
||||||
|
|
|
@ -83,13 +83,11 @@
|
||||||
<<<
|
<<<
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for page in range(1, pages + 1) %}
|
<select class="page-select">
|
||||||
{% if curr_page != page %}
|
{% for page in range(1, pages + 1) %}
|
||||||
<a href="{{ url_for('users.listing', page=page) }}">{{ page }}</a>
|
<option {% if curr_page == page %}selected{% endif %}>{{ page }}</option>
|
||||||
{% else %}
|
{% endfor %}
|
||||||
<b>{{ page }}</b>
|
</select>
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% if curr_page != pages %}
|
{% if curr_page != pages %}
|
||||||
<a href="{{ url_for('users.listing', page=curr_page + 1) }}">
|
<a href="{{ url_for('users.listing', page=curr_page + 1) }}">
|
||||||
>>>
|
>>>
|
||||||
|
|
Loading…
Reference in New Issue