mirror of
https://github.com/go-gitea/gitea.git
synced 2024-08-25 21:44:20 -04:00
* js: Import Semantic-UI's dropdown.js (version 2.3.1) * js: Set tabindex=-1 on dropdown items Setting tabindex=-1 on focusable elements within dropdown menus allows the user to treat dropdown menus as a single focusable item with its own internal navigation using arrow keys. * js: Don't use jQuery to click menu items Menu items are often <a> elements, which jQuery refuses to trigger click events on. Instead it just bubbles up to the menu. Using HTMLElement's click method fixes this and makes menu items clickable from the keyboard using dropdown menus. * js: Set correct ARIA 1.1 roles on dropdown menus Setting role= makes assistive technology aware there is a widget here. In this case, Orca will now exit browse mode and allow us to capture keydown events when focused on a dropdown menu. It will also inform the user that there's a menu focused. Since dropdowns can be used in multiple elements each with different ARIA roles, a guessRole method is used to find the correct role. All roles I consider possible are listed, but only menu is implemented. * js: Set aria-expanded when dropdown menus show and hide This is deliberately done before the transition finishes so that screen readers get immediate feedback. * js: Set aria-label or aria-labelledby on dropdown menus This makes dropdown menu buttons screen reader accessible. aria-labelledby refers to an element using an ID, so the chosen labels are now assigned a unique ID- This ID is not stable, do not refer to it with user scripts. * js: Set aria-activedescendant on dropdown menus As the menus grab focus and navigate by tracking a 'selected' div class, assistive technology has no idea that what the current selection is. Assign IDs to each menu item and set aria-activedescendant to the ID of the currently selected menu item. When the menu is unfocused, remove aria-activedescendant- This isn't neccessary but in my experience it triggers Orca to remind the user of their current selection when re-focusing the menu. * Makefile: Make eslint ignore semantic.dropdown.js This file is taken from Semantic UI which isn't linted upstream. Ignore it as we won't fix these issues. * js: Add version note to semantic.dropdown.js * Add Md5 AppVer to templates/base/footer.tmpl Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * Add Md5 AppVer to templates/pwa/serviceworker_js.tmpl Co-Authored-By: guillep2k <18600385+guillep2k@users.noreply.github.com> * semantic.dropdown.js -> semantic.dropdown.custom.js * Use eslintignore * remove bogus submodule
136 lines
4.6 KiB
Cheetah
136 lines
4.6 KiB
Cheetah
{{/*
|
|
<html>
|
|
<body>
|
|
<div>
|
|
*/}}
|
|
|
|
{{template "custom/body_inner_post" .}}
|
|
|
|
</div>
|
|
|
|
{{template "custom/body_outer_post" .}}
|
|
|
|
{{template "base/footer_content" .}}
|
|
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery/jquery.min.js?v=3.4.1"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery-migrate/jquery-migrate.min.js?v=3.0.1"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.areyousure/jquery.are-you-sure.js"></script>
|
|
{{if .RequireSimpleMDE}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js"></script>
|
|
<script>
|
|
CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js";
|
|
</script>
|
|
{{end}}
|
|
{{if .RequireGitGraph}}
|
|
<!-- graph -->
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/gitgraph/gitgraph.js"></script>
|
|
<script src="{{StaticUrlPrefix}}/js/draw.js"></script>
|
|
{{end}}
|
|
|
|
<!-- Third-party libraries -->
|
|
{{if .RequireHighlightJS}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/highlight/highlight.pack.js"></script>
|
|
{{end}}
|
|
{{if .RequireMinicolors}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script>
|
|
{{end}}
|
|
{{if .RequireDatetimepicker}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script>
|
|
{{end}}
|
|
{{if .RequireDropzone}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js"></script>
|
|
{{end}}
|
|
{{if .RequireU2F}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script>
|
|
{{end}}
|
|
{{if .EnableCaptcha}}
|
|
{{if eq .CaptchaType "recaptcha"}}
|
|
<script src='{{ URLJoin .RecaptchaURL "api.js"}}' async></script>
|
|
{{end}}
|
|
{{end}}
|
|
{{if .RequireTribute}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js"></script>
|
|
<script>
|
|
var issuesTribute = new Tribute({
|
|
values: [
|
|
{{ range .Assignees }}
|
|
{key: '{{.Name}} {{.FullName}}', value: '{{.Name}}',
|
|
name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.RelAvatarLink}}'},
|
|
{{ end }}
|
|
],
|
|
noMatchTemplate: function () { return null },
|
|
menuItemTemplate: function (item) {
|
|
var user = item.original;
|
|
var itemStr = '<img src="' + user.avatar + '"/><span class="name">' + user.name + '</span>';
|
|
if (user.fullname && user.fullname != '') {
|
|
itemStr += '<span class="fullname">' + user.fullname + '</span>';
|
|
}
|
|
return itemStr;
|
|
}
|
|
});
|
|
var content = document.getElementById('content');
|
|
if (content != null) {
|
|
issuesTribute.attach(content);
|
|
}
|
|
</script>
|
|
<script>
|
|
var emojiTribute = new Tribute({
|
|
collection: [{
|
|
trigger: ':',
|
|
requireLeadingSpace: true,
|
|
values: function (text, cb) {
|
|
var array = emojify.emojiNames;
|
|
var data = [];
|
|
for(var j=0; j<array.length; j++) {
|
|
if(array[j].indexOf(text) !== -1) {
|
|
data.push(array[j]);
|
|
if(data.length > 5) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
cb(data);
|
|
},
|
|
lookup: function (item) {
|
|
return item;
|
|
},
|
|
selectTemplate: function (item) {
|
|
if (typeof item === 'undefined') return null;
|
|
return ':' + item.original + ':';
|
|
},
|
|
menuItemTemplate: function (item) {
|
|
return '<img class="emoji" src="{{StaticUrlPrefix}}/vendor/plugins/emojify/images/' + item.original + '.png"/>' + item.original;
|
|
}
|
|
}]
|
|
});
|
|
var emojiInputs = document.querySelectorAll('.emoji-input');
|
|
if (emojiInputs.length > 0) {
|
|
emojiTribute.attach(emojiInputs);
|
|
}
|
|
var content = document.getElementById('content');
|
|
if (content != null) {
|
|
emojiTribute.attach(document.getElementById('content'));
|
|
}
|
|
</script>
|
|
{{end}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/emojify/emojify.min.js"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/clipboard/clipboard.min.js"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/vue/vue.min.js"></script>
|
|
|
|
<!-- JavaScript -->
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/semantic/semantic.min.js"></script>
|
|
<script src="{{StaticUrlPrefix}}/js/semantic.dropdown.custom.js?v={{MD5 AppVer}}"></script>
|
|
<script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script>
|
|
{{if .EnableHeatmap}}
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/moment/moment.min.js" charset="utf-8"></script>
|
|
<script src="{{StaticUrlPrefix}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.browser.js" charset="utf-8"></script>
|
|
<script type="text/javascript">
|
|
initHeatmap('user-heatmap', '{{.HeatmapUser}}');
|
|
</script>
|
|
{{end}}
|
|
{{template "custom/footer" .}}
|
|
</body>
|
|
</html>
|