$Render={};
$Render.page=function(page,vie,limit,cur)
{
	//page总共多少条数据
	//vie每页显示多少条数据
	//limit显示几个分页块
	//cur当前第几页
	page=Math.ceil(page/vie);
	var act=cur;
	var min=Math.floor(limit/2);
	if(page>limit)
	{
		if(cur<=(limit-min))
		{
			var other=1;
			cur=limit+1;
			return dis(cur,other,act,'first');
		}
		else if(cur>=(page-min))
		{
			var other=page-(limit-1);
			cur=page+1;
			return dis(cur,other,act,'end');	
		}
		else
		{
			var other=cur-min;
			cur=cur+(limit-min);
			return dis(cur,other,act,'com');
		}
	}
	else
	{
		var other=1;
		cur=page+1;
		return dis(cur,other,act,'small');
	}
	function dis(__aft,__pre,act,ty)
	{
		var _str='';
		for(var i=__pre;i<__aft;i++)
		{
			if(i==act)
			{
				_str+=' <li><a href="#" class="active" data-key="'+i+'">'+i+'</a></li>';
			}
			else
			{
				_str+=' <li><a href="#" data-key="'+i+'">'+i+'</a></li>';
			}
		}
		if(ty=='first')
		{
			return _str+'<li><a href="#" data-key="after">»</a></li>';
		}
		else if(ty=='end')
		{
			return ' <li><a href="#" data-key="before">«</a></li>'+_str;
		}
		else if(ty=='small')
		{
			return _str;
		}
		else
		{
			return ' <li><a href="#" data-key="before">«</a></li>'+_str+'<li><a href="#" data-key="after">»</a></li>';
		}
	}
}
$Render.parse=function(str)
{
	str = str.replace(/&amp;/g,"&");
	str = str.replace(/&lt;/g,"<");
	str = str.replace(/&gt;/g,">");
	str = str.replace(/\\\'/g,"'");
	str = str.replace(/\\\"/g,'"');
	return str;
}
$Render.display=async function(str,___render)
{
    if(!str)return '';
	str=str.replace(/\r|\n/g,'')
	str=str.replace(/\"/g,'\\"')

    var render=___render?___render:{};
    var _fun='"use strict";var $Str="";';
    var arr=str.split(/{%(.*?)%}/);

    for (var index in arr) 
    {
        if((index%2)===0)
        { 
            _fun+=('$Str+="'+arr[index])+'";'
        }
        else
        {
			arr[index]=$Render.parse(arr[index]);
            if(arr[index].indexOf('=')===0)
            {
                _fun+=('$Str+='+arr[index].slice(1))+';'
            }
            else if(arr[index]==='end')
            {
                _fun+='}';
            }
            else if((arr[index].indexOf('else')!=-1))
            {
                _fun+='}'+arr[index]+'{'
			}
			else
			{
				let str=''
				if(arr[index].indexOf('range~')===0)
				{
					let cur=arr[index].split('~')[1]
					arr[index]='for(let $index in '+cur+')'
					str='let $Rder='+cur+'[$index];'
				}
				
				_fun+=arr[index]+'{'+str
			}
        }
	}
	_fun+='return $Str;'
	//_fun+='($Str);'
    try 
    {
		return await $M.eval(_fun,render)
		//evel这种方式也会造成内存泄漏，v8
    } 
    catch (error) 
    {
        $M.info('模板语法存在错误',error);
        return '';
    }
}

