From 60caa45049c8d98a664c6a4c7fc18006007b05c8 Mon Sep 17 00:00:00 2001 From: jmontoyaa Date: Fri, 3 Jun 2016 11:57:50 +0200 Subject: [PATCH] Update jquery.fcbkcomplete.js --- main/inc/ajax/extra_field.ajax.php | 5 +- main/inc/ajax/skill.ajax.php | 4 +- main/inc/lib/extra_field.lib.php | 2 +- main/inc/lib/extra_field_value.lib.php | 8 +- .../lib/javascript/tag/jquery.fcbkcomplete.js | 1286 ++++++++--------- .../javascript/tag/jquery.fcbkcomplete.min.js | 54 +- main/inc/lib/javascript/tag/style.css | 240 +-- main/inc/lib/usermanager.lib.php | 9 +- 8 files changed, 692 insertions(+), 916 deletions(-) diff --git a/main/inc/ajax/extra_field.ajax.php b/main/inc/ajax/extra_field.ajax.php index 502163a7d4..26f276d635 100755 --- a/main/inc/ajax/extra_field.ajax.php +++ b/main/inc/ajax/extra_field.ajax.php @@ -1,6 +1,8 @@ getQuery() ->getResult(); + /** @var Tag $tag */ foreach ($tags as $tag) { $result[] = [ - 'caption' => $tag->getTag(), + 'key' => $tag->getTag(), 'value' => $tag->getTag() ]; } diff --git a/main/inc/ajax/skill.ajax.php b/main/inc/ajax/skill.ajax.php index 01f740618a..46f098a615 100755 --- a/main/inc/ajax/skill.ajax.php +++ b/main/inc/ajax/skill.ajax.php @@ -40,7 +40,7 @@ switch ($action) { $skills = $skill->find('all', array('where' => array('name LIKE %?% '=>$_REQUEST['tag']))); $return_skills = array(); foreach ($skills as $skill) { - $skill['caption'] = $skill['name']; + $skill['key'] = $skill['name']; $skill['value'] = $skill['id']; $return_skills[] = $skill; } @@ -68,7 +68,7 @@ switch ($action) { $gradebooks = $gradebook->find('all', array('where' => array('name LIKE %?% ' => $_REQUEST['tag']))); $return = array(); foreach ($gradebooks as $item) { - $item['caption'] = $item['name']; + $item['key'] = $item['name']; $item['value'] = $item['id']; $return[] = $item; } diff --git a/main/inc/lib/extra_field.lib.php b/main/inc/lib/extra_field.lib.php index 5ef52776c0..b2bc50ef27 100755 --- a/main/inc/lib/extra_field.lib.php +++ b/main/inc/lib/extra_field.lib.php @@ -1275,7 +1275,7 @@ EOF; filter_hide: true, complete_text:"$complete_text", firstselected: false, - filter_selected: true, + filter_selected: true, newel: true }); EOF; diff --git a/main/inc/lib/extra_field_value.lib.php b/main/inc/lib/extra_field_value.lib.php index 83bb009b2d..0b3a66a90c 100755 --- a/main/inc/lib/extra_field_value.lib.php +++ b/main/inc/lib/extra_field_value.lib.php @@ -2,6 +2,7 @@ /* For licensing terms, see /license.txt */ use Chamilo\CoreBundle\Entity\ExtraField as EntityExtraField; +use Chamilo\CoreBundle\Entity\Tag; /** * Class ExtraFieldValue @@ -156,15 +157,14 @@ class ExtraFieldValue extends Model $tags = []; foreach ($tagValues as $tagValue) { - $tagsResult = $em - ->getRepository('ChamiloCoreBundle:Tag') + $tagsResult = $em->getRepository('ChamiloCoreBundle:Tag') ->findBy([ 'tag' => $tagValue, 'fieldId' => $extraFieldInfo['id'] ]); if (empty($tagsResult)) { - $tag = new \Chamilo\CoreBundle\Entity\Tag(); + $tag = new Tag(); $tag->setFieldId($extraFieldInfo['id']); $tag->setTag($tagValue); @@ -173,7 +173,7 @@ class ExtraFieldValue extends Model $tags = array_merge($tags, $tagsResult); } } - + foreach ($tags as $tag) { $tagUses = $em ->getRepository('ChamiloCoreBundle:ExtraFieldRelTag') diff --git a/main/inc/lib/javascript/tag/jquery.fcbkcomplete.js b/main/inc/lib/javascript/tag/jquery.fcbkcomplete.js index 89fae1e17e..2a3ed906cd 100755 --- a/main/inc/lib/javascript/tag/jquery.fcbkcomplete.js +++ b/main/inc/lib/javascript/tag/jquery.fcbkcomplete.js @@ -1,664 +1,640 @@ -/* - FCBKcomplete 2.6 - - Jquery version required: 1.2.x, 1.3.x - - Changelog: - - - 2.00 new version of fcbkcomplete - - - 2.01 fixed bugs & added features - fixed filter bug for preadded items - focus on the input after selecting tag - the element removed pressing backspace when the element is selected - input tag in the control has a border in IE7 - added iterate over each match and apply the plugin separately - set focus on the input after selecting tag - - - 2.02 fixed fist element selected bug - fixed defaultfilter error bug - - - 2.5 removed selected="selected" attribute due ie bug - element search algorithm changed - better performance fix added - fixed many small bugs - onselect event added - onremove event added - - - 2.6 ie6/7 support fix added - added new public method addItem due request - added new options "firstselected" that you can set true/false to select first element on dropdown list - autoexpand input element added - removeItem bug fixed - and many more bug fixed - - */ +/** + FCBKcomplete v2.8.9.3 is released under the MIT License + - Jquery version required: 1.6.x +*/ + +/* Based on TextboxList by Guillermo Rauch http://devthought.com/ */ -/* Coded by: emposha */ -/* Copyright: Emposha.com - Distributed under MIT - Keep this message! */ -/* +/** + * width - element width (by default 512px) * json_url - url to fetch json object - * cache - use cache + * cache - use cache * height - maximum number of element shown before scroll will apear * newel - show typed text like a element - * firstselected - automaticly select first element from dropdown + * firstselected - automaticly select first element from dropdown * filter_case - case sensitive filter * filter_selected - filter selected items from list + * filter_begin - filter only from begin * complete_text - text for complete page - * maxshownitems - maximum numbers that will be shown at dropdown list (less better performance) - * onselect - fire event on item select - * onremove - fire event on item remove + * maxshownitems - maximum numbers that will be shown at dropdown list (less better performance) + * oncreate - fire event on item create + * onselect - fire event on item select + * onremove - fire event on item remove + * maxitems - maximum items that can be added + * delay - delay between ajax request (bigger delay, lower server time request) + * addontab - add first visible element on tab or enter hit + * addoncomma - add first visible element when pressing the comma key + * addonblur - add first visible element when input loses focus + * attachto - after this element fcbkcomplete insert own elements + * bricket - use square bricket with select (needed for asp or php) enabled by default + * input_tabindex - the tabindex of the input element + * input_min_size - minimum size of the input element (default: 1) + * input_name - value of the input element's 'name'-attribute (no 'name'-attribute set if empty) + * select_all_text - text for select all link */ - -jQuery( - function ($) - { - $.fn.fcbkcomplete = function (opt) - { - return this.each(function() - { - function init() - { - createFCBK(); - preSet(); - addInput(0); - } - - function createFCBK() - { - element.hide(); - element.attr("multiple","multiple"); - if (element.attr("name").indexOf("[]") == -1) - { - element.attr("name",element.attr("name")+"[]"); - } - - holder = $(document.createElement("ul")); - holder.attr("class", "holder"); - element.after(holder); - - complete = $(document.createElement("div")); - complete.addClass("facebook-auto"); - - complete.append('
'+ options.complete_text +"
"); - - if (browser_msie) - { - complete.append(''); - browser_msie_frame = complete.children('.ie6fix'); - //$("input:checkbox").parent().css("z-index","-1"); - } - - feed = $(document.createElement("ul")); - feed.attr("id", elemid + "_feed"); - - complete.prepend(feed); - holder.after(complete); - feed.css("width","300px"); - } - - function preSet() - { - element.children("option").each( - function(i,option) - { - option = $(option); - if (option.hasClass("selected")) - { - addItem (option.text(), option.val(), true); - option.attr("selected","selected"); - } - else - { - option.removeAttr("selected"); - } - - cache.push({ - caption: option.text(), - value: option.val() - }); - search_string += "" + (cache.length - 1) + ":" + option.text() + ";"; - } - ); - } - - //public method to add new item - this.addItem = function(title, value) - { - addItem(title, value); - } - - function addItem (title, value, preadded) - { - var li = document.createElement("li"); - var txt = document.createTextNode(title); - var aclose = document.createElement("a"); - - $(li).attr({"class": "bit-box","rel": value}); - $(li).prepend(txt); - $(aclose).attr({"class": "closebutton","href": "#"}); - - li.appendChild(aclose); - holder.append(li); - - $(aclose).click( - function(){ - $(this).parent("li").fadeOut("fast", - function(){ - removeItem($(this)); - } - ); - return false; - } - ); - - if (!preadded) - { - $("#"+elemid + "_annoninput").remove(); - var _item; - addInput(1); - if (element.children("option[value=" + value + "]").length) - { - _item = element.children("option[value=" + value + "]"); - _item.get(0).setAttribute("selected", "selected"); - if (!_item.hasClass("selected")) - { - _item.addClass("selected"); - } - } - else - { - var _item = $(document.createElement("option")); - _item.attr("value", value).get(0).setAttribute("selected", "selected"); - _item.attr("value", value).addClass("selected"); - _item.text(title); - element.append(_item); - } - if (options.onselect.length) - { - funCall(options.onselect,_item) - } - } - holder.children("li.bit-box.deleted").removeClass("deleted"); - feed.hide(); - browser_msie?browser_msie_frame.hide():''; - } - - function removeItem(item) - { - if (options.onremove.length) - { - var _item = element.children("option[value=" + item.attr("rel") + "]"); - funCall(options.onremove,_item) - } - element.children("option[value=" + item.attr("rel") + "]").removeAttr("selected"); - element.children("option[value=" + item.attr("rel") + "]").removeClass("selected"); - item.remove(); - deleting = 0; - } - - function addInput(focusme) - { - var li = $(document.createElement("li")); - var input = $(document.createElement("input")); - - li.attr({"class": "bit-input","id": elemid + "_annoninput"}); - input.attr({"type": "text","class": "maininput","size": "1", "id":"text_fcbk"}); - holder.append(li.append(input)); - - input.focus( - function() - { - complete.fadeIn("fast"); - - } - ); - - input.blur( - function() - { - complete.fadeOut("fast"); - } - ); - - holder.click( - function() - { - input.focus(); - if (feed.length && input.val().length) - { - feed.show(); - } - else - { - feed.hide(); - browser_msie?browser_msie_frame.hide():''; - complete.children(".default").show(); - } - } - ); - - input.keypress( - function(event) - { - if (event.keyCode == 13) - { - return false; - } - //auto expand input - input.attr("size",input.val().length + 1); - } - ); - - input.keydown( - function(event) - { - //prevent to enter some bad chars when input is empty - if(event.keyCode == 191) - { - event.preventDefault(); - return false; - } - } - ); - - input.keyup( - function(event) - { - var etext = xssPrevent(input.val()); - - if (event.keyCode == 8 && etext.length == 0) - { - feed.hide(); - browser_msie?browser_msie_frame.hide():''; - if (holder.children("li.bit-box.deleted").length == 0) - { - holder.children("li.bit-box:last").addClass("deleted"); - return false; - } - else - { - if (deleting) - { - return; - } - deleting = 1; - holder.children("li.bit-box.deleted").fadeOut("fast", function() - { - removeItem($(this)); - return false; - }); - } - } - - if (event.keyCode != 40 && event.keyCode != 38 && etext.length != 0) - { - counter = 0; - - if (options.json_url) - { - if (options.cache && json_cache) - { - addMembers(etext); - bindEvents(); - } - else - { - //search texts > 1 fix by >J.montoya - if (etext.length > 0) { - $.getJSON(options.json_url + "&tag=" + etext, null, function(data){ - addMembers(etext, data); - json_cache = true; - bindEvents(); - }); - } - } - } - else - { - addMembers(etext); - bindEvents(); - } - complete.children(".default").hide(); - feed.show(); - } - } - ); - if (focusme) - { - setTimeout(function(){ - input.focus(); - complete.children(".default").show(); - },1); - } - } - - function addMembers(etext, data) - { - feed.html(''); - - if (!options.cache) - { - cache = new Array(); - search_string = ""; - } - - addTextItem(etext); - - if (data != null && data.length) - { - $.each(data, - function(i, val) - { - cache.push ( - { - caption: val.caption, - value: val.value - } - ); - search_string += "" + (cache.length - 1) + ":" + val.caption + ";"; - } - ); - } - - var maximum = options.maxshownitems 0) - { - var id = match[1]; - var object = cache[id]; - if (options.filter_selected && element.children("option[value=" + object.value + "]").hasClass("selected")) - { - //nothing here... - } - else - { - content += '
  • ' + itemIllumination(object.caption, etext) + '
  • '; - counter++; - maximum--; - } - match = myregexp.exec(search_string); - } - feed.append(content); - - if (options.firstselected) - { - focuson = feed.children("li:visible:first"); - focuson.addClass("auto-focus"); - } - - if (counter > options.height) - { - feed.css({"height": (options.height * 24) + "px","overflow": "auto"}); - if (browser_msie) - { - browser_msie_frame.css({"height": (options.height * 24) + "px", "width": feed.width() + "px"}).show(); - } - } - else - { - feed.css("height", "auto"); - if (browser_msie) - { - browser_msie_frame.css({"height": feed.height() + "px", "width": feed.width() + "px"}).show(); - } - } - } - - function itemIllumination(text, etext) - { - if (options.filter_case) - { - try { - eval("var text = text.replace(/(.*)(" + etext + ")(.*)/gi,'$1$2$3');"); - } catch(ex){}; - } - else - { - try { - eval("var text = text.replace(/(.*)(" + etext.toLowerCase() + ")(.*)/gi,'$1$2$3');"); - }catch(ex){}; - } - return text; - } - - function bindFeedEvent() - { - feed.children("li").mouseover( - function() - { - feed.children("li").removeClass("auto-focus"); - $(this).addClass("auto-focus"); - focuson = $(this); - } - ); - - feed.children("li").mouseout( - function() - { - $(this).removeClass("auto-focus"); - focuson = null; - } - ); - } - - function removeFeedEvent() - { - feed.children("li").unbind("mouseover"); - feed.children("li").unbind("mouseout"); - feed.mousemove( - function () - { - bindFeedEvent(); - feed.unbind("mousemove"); - } - ); - } - - function bindEvents() - { - var maininput = $("#"+elemid + "_annoninput").children(".maininput"); - bindFeedEvent(); - feed.children("li").unbind("mousedown"); - feed.children("li").mousedown( - function() - { - //click in the list - var option = $(this); - addItem(option.text(),option.attr("rel")); - feed.hide(); - browser_msie?browser_msie_frame.hide():''; - complete.hide(); - } - ); - - maininput.unbind("keydown"); - maininput.keydown( - function(event) - { - if(event.keyCode == 191) - { - event.preventDefault(); - return false; - } - - if (event.keyCode != 8) - { - holder.children("li.bit-box.deleted").removeClass("deleted"); - } - - if (event.keyCode == 13 && checkFocusOn()) - { - var option = focuson; - addItem(option.text(), option.attr("rel")); - complete.hide(); - event.preventDefault(); - focuson = null; - return false; - } - - if (event.keyCode == 13 && !checkFocusOn()) - { - if (options.newel) - { - var value = xssPrevent($(this).val()); - addItem(value, value); - complete.hide(); - event.preventDefault(); - focuson = null; - } - return false; - } - - if (event.keyCode == 40) - { - removeFeedEvent(); - if (focuson == null || focuson.length == 0) - { - focuson = feed.children("li:visible:first"); - feed.get(0).scrollTop = 0; - } - else - { - focuson.removeClass("auto-focus"); - focuson = focuson.nextAll("li:visible:first"); - var prev = parseInt(focuson.prevAll("li:visible").length,10); - var next = parseInt(focuson.nextAll("li:visible").length,10); - if ((prev > Math.round(options.height /2) || next <= Math.round(options.height /2)) && typeof(focuson.get(0)) != "undefined") - { - feed.get(0).scrollTop = parseInt(focuson.get(0).scrollHeight,10) * (prev - Math.round(options.height /2)); - } - } - feed.children("li").removeClass("auto-focus"); - focuson.addClass("auto-focus"); - } - if (event.keyCode == 38) - { - removeFeedEvent(); - if (focuson == null || focuson.length == 0) - { - focuson = feed.children("li:visible:last"); - feed.get(0).scrollTop = parseInt(focuson.get(0).scrollHeight,10) * (parseInt(feed.children("li:visible").length,10) - Math.round(options.height /2)); - } - else - { - focuson.removeClass("auto-focus"); - focuson = focuson.prevAll("li:visible:first"); - var prev = parseInt(focuson.prevAll("li:visible").length,10); - var next = parseInt(focuson.nextAll("li:visible").length,10); - if ((next > Math.round(options.height /2) || prev <= Math.round(options.height /2)) && typeof(focuson.get(0)) != "undefined") - { - feed.get(0).scrollTop = parseInt(focuson.get(0).scrollHeight,10) * (prev - Math.round(options.height /2)); - } - } - feed.children("li").removeClass("auto-focus"); - focuson.addClass("auto-focus"); - } - } - ); - } - - function addTextItem(value) - { - if (options.newel) - { - feed.children("li[fckb=1]").remove(); - if (value.length == 0) - { - return; - } - var li = $(document.createElement("li")); - li.attr({"rel": value,"fckb": "1"}).html(value); - feed.prepend(li); - counter++; - } else - { - return; - } - } - - function funCall(func,item) - { - var _object = ""; - for(i=0;i < item.get(0).attributes.length;i++) - { - if (item.get(0).attributes[i].nodeValue != null) - { - _object += "\"_" + item.get(0).attributes[i].nodeName + "\": \"" + item.get(0).attributes[i].nodeValue + "\","; - } - } - _object = "{"+ _object + " notinuse: 0}"; - try { - eval(func + "(" + _object + ")"); - }catch(ex){}; - } - - function checkFocusOn() - { - if (focuson == null) - { - return false; - } - if (focuson.length == 0) - { - return false; - } - return true; - } - - function xssPrevent(string) - { - string = string.replace(/[\"\'][\s]*javascript:(.*)[\"\']/g, "\"\""); - string = string.replace(/script(.*)/g, ""); - string = string.replace(/eval\((.*)\)/g, ""); - string = string.replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', ''); - return string; + +(function( $, undefined ) { + $.fn.fcbkcomplete = function(opt) { + return this.queue( function() { + function init() { + createFCBK(); + addInput(0); + } + + function createFCBK() { + holder = $('
      ').width(options.width); + if (options.attachto) { + if (typeof(options.attachto) == "object") { + options.attachto.append(holder); + } else { + $(options.attachto).append(holder); + } + } else { + element.after(holder); + } + complete = $('