| /* |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| */ |
| |
| var userMentionList; |
| |
| var getProjectUsers = function(users_url) { |
| $.get(users_url, function(data) { |
| userMentionList = data.options.map(function(item) { |
| return { |
| text: item.value, |
| displayText: item.label |
| }; |
| }); |
| }); |
| } |
| |
| CodeMirror.registerHelper('hint', 'alluraUserMentions', function (editor) { |
| var word = /[^@]+/; |
| var cur = editor.getCursor(), curLine = editor.getLine(cur.line); |
| var tokenType = editor.getTokenTypeAt(cur); |
| |
| if(!!tokenType && tokenType.indexOf('comment') != -1) // Disable um inside code |
| return; |
| |
| var end = cur.ch, start = end; |
| // Find the starting position of currently typed word and set it to 'start' var |
| while (start && word.test(curLine.charAt(start - 1))) --start; |
| // Extract the current word from the current line using 'start' / 'end' value pair |
| var curWord = start != end && curLine.slice(start, end); |
| var list = []; |
| if(curWord) { |
| // If there is current word set, We can filter out users from the main list and display them |
| userMentionList.forEach(function(item) { |
| if(item.displayText.toLowerCase().indexOf(curWord.toLowerCase()) != -1) |
| list.push(item); |
| }); |
| } |
| else { |
| // Otherwise, we display the entire list |
| list = userMentionList.slice(); |
| } |
| |
| return { list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end) }; |
| }); |