Skip to content
Snippets Groups Projects
Select Git revision
20 results Searching

forum_controller.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    script.js 2.79 KiB
    (function ($, STUDIP) {
        'use strict';
    
        var searchTimeout = null;
        var lastRequestController = null;
    
        $(document).ready(function () {
            let source = null;
            STUDIP.loadChunk('vue').then(function ({createApp}) {
                createApp({
                    data: function () {
                        return {
                            needle: '',
                            results: false,
                            selectedTicket: false,
                        };
                    },
                    mounted () {
                        source = this.$el.dataset.source;
                    },
                    methods: {
                        searchTickets (event) {
                            const needle = this.needle.trim();
                            if (needle.trim().length < 3) {
                                return;
                            }
    
                            if (lastRequestController) {
                                lastRequestController.abort();
                            }
    
                            lastRequestController = new AbortController();
                            const { signal } = lastRequestController;
    
                            clearTimeout(searchTimeout);
                            searchTimeout = setTimeout(function () {
                                const url = STUDIP.URLHelper.getURL(source, {term: needle});
                                fetch(url, { signal }).then(function (response) {
                                    return response.json();
                                }).then(function (json) {
                                    this.results = json;
                                }.bind(this));
                            }.bind(this), 300);
                        }
                    },
                    computed: {
                        orderedResults () {
                            const needle = this.needle.trim();
                            return Object.values(this.results).sort(function (a, b) {
                                if (a[0] === needle) {
                                    return 1;
                                }
                                if (b[0] === needle) {
                                    return -1;
                                }
                                return b[0] - a[0];
                            });
                        }
                    }
                }).$mount('#trac-migrate');
            });
            // const element = document.getElementById('trac-gitlab-needle');
            // const source = element.dataset.source;
            //
            // $(element).keyup(function (event) {
            //     const needle = this.value.trim();
            //
            //     if (needle.length < 3) {
            //         return;
            //     }
            //
            //     $.getJSON(source, {data: {term: needle}}).done(function (response) {
            //         console.log("response", response);
            //     });
            // });
        });
    }(jQuery, STUDIP));