<commit_before>/*
 * Tangram
 * Copyright 2011 Baidu Inc. All rights reserved.
 */

///import baidu.ui.createUI;
///import baidu.lang.guid;
///import baidu.browser.ie;
///import baidu.dom.insertHTML;
///import baidu.string.format;
///import baidu.array.each;
///import baidu.array.indexOf;
///import baidu.array.find;
///import baidu.dom.g;
///import baidu.dom.remove;
///import baidu.dom.children;
///import baidu.dom.getStyle;
///import baidu.dom.create;
///import baidu.dom.addClass;
///import baidu.dom.removeClass;
///import baidu.event.on;
///import baidu.event.un;
///import baidu.fn.bind;
///import baidu.object.each;



/**
 * 创建一个简单的滚动组件
 * @name baidu.ui.Carousel
 * @class
 * @param {Object} options config参数.
 * @config {String} orientation 描述该组件是创建一个横向滚动组件或是竖向滚动组件，取值：horizontal:横向, vertical:竖向
 * @config {Object} contentText 定义carousel组件每一项的字符数据，格式：[{content: 'text-0'}, {content: 'text-1'}, {content: 'text-2'}...]
 * @config {String} flip 定义组件的翻页方式，取值：item:一次滚动一个项, page:一次滚动一页
 * @config {Number} pageSize 描述一页显示多少个滚动项，默认值是3
 * @config {String} onload 当渲染完组件时触发该事件
 * @config {String} onbeforescroll 当开始滚动时触发该事件，该事件的event参数中可以得到四个属性：index:当前需要滚动的索引, scrollOffset:滚动到可视区域的位置, direction:滚动方向, scrollUnit:需要滚动过多少个项
 * @config {String} onafterscroll 当结束一次滚动时触发该事件，该事件的event参数中可以得到四个属性：index:当前需要滚动的索引, scrollOffset:滚动到可视区域的位置, direction:滚动方向, scrollUnit:需要滚动过多少个项
 * @config {String} onprev 当翻到前一项或前一页时触发该事件
 * @config {String} onnext 当翻到下一项或下一页时触发该事件
 * @author linlingyu
 */



baidu.ui.Carousel = baidu.ui.createUI(function(options) {
    var me = this,
        data = me.contentText || [];
    me._dataList = data.slice(0, data.length);
    me._itemIds = [];
    me._items = {};//用来存入被删除的节点，当再次被使用时可以直接拿回来,格式:{element: dom, handler: []}
    baidu.array.each(me._dataList, function(item) {
        me._itemIds.push(baidu.lang.guid());
    });
    me.flip = me.flip.toLowerCase();
    me.orientation = me.orientation.toLowerCase();
}).extend(
    /**
     *  @lends baidu.ui.Carousel.prototype
     */
{
    uiType: 'carousel',
    orientation: 'horizontal',//horizontal|vertical
    //direction: 'down',//up|right|down|left
    flip: 'item',//item|page
    pageSize: 3,
    scrollIndex: 0,
    _axis: {
        horizontal: {vector: '_boundX', pos: 'left', size: 'width', offset: 'offsetWidth', client: 'clientWidth', scrollPos: 'scrollLeft'},
        vertical: {vector: '_boundY', pos: 'top', size: 'height', offset: 'offsetHeight', client: 'clientHeight', scrollPos: 'scrollTop'}
    },
    /**
     * 生成一个容器的字符串
     * @return {String}
     * @private
     */
    getString: function() {
        var me = this,
            tpl = '<div id="#{id}" class="#{class}">#{content}</div>',
            str = baidu.string.format(tpl, {
                id: me.getId('scroll'),
                'class': me.getClass('scroll')
            });
        return baidu.string.format(tpl, {
            id: me.getId(),
            'class': me.getClass(),
            content: str
        });
    },
    /**
     * 渲染滚动组件到参数指定的容器中
     * @param {HTMLElement} target 一个用来存放组件的容器对象.
     */
    render: function(target) {
        var me = this;
        if (!target || me.getMain()) {return;}
        baidu.dom.insertHTML(me.renderMain(target), 'beforeEnd', me.getString());
        me._renderItems();
        me._resizeView();
        me._moveToMiddle();
        me.focus(me.scrollIndex);
        me.addEventListener('onbeforeendscroll', function(evt) {
            var orie = me.orientation == 'horizontal',
                axis = me._axis[me.orientation],
                sContainer = me.getScrollContainer();
            me._renderItems(evt.index, evt.scrollOffset);<commit_msg>Carousel : 将生成各项guid的代码放到render中去执行 - [bugfix]防止当在构造中重写dataList造成生成的guid和dataList不一致的情况<commit_after>/*
 * Tangram
 * Copyright 2011 Baidu Inc. All rights reserved.
 */

///import baidu.ui.createUI;
///import baidu.lang.guid;
///import baidu.browser.ie;
///import baidu.dom.insertHTML;
///import baidu.string.format;
///import baidu.array.each;
///import baidu.array.indexOf;
///import baidu.array.find;
///import baidu.dom.g;
///import baidu.dom.remove;
///import baidu.dom.children;
///import baidu.dom.getStyle;
///import baidu.dom.create;
///import baidu.dom.addClass;
///import baidu.dom.removeClass;
///import baidu.event.on;
///import baidu.event.un;
///import baidu.fn.bind;
///import baidu.object.each;



/**
 * 创建一个简单的滚动组件
 * @name baidu.ui.Carousel
 * @class
 * @param {Object} options config参数.
 * @config {String} orientation 描述该组件是创建一个横向滚动组件或是竖向滚动组件，取值：horizontal:横向, vertical:竖向
 * @config {Object} contentText 定义carousel组件每一项的字符数据，格式：[{content: 'text-0'}, {content: 'text-1'}, {content: 'text-2'}...]
 * @config {String} flip 定义组件的翻页方式，取值：item:一次滚动一个项, page:一次滚动一页
 * @config {Number} pageSize 描述一页显示多少个滚动项，默认值是3
 * @config {String} onload 当渲染完组件时触发该事件
 * @config {String} onbeforescroll 当开始滚动时触发该事件，该事件的event参数中可以得到四个属性：index:当前需要滚动的索引, scrollOffset:滚动到可视区域的位置, direction:滚动方向, scrollUnit:需要滚动过多少个项
 * @config {String} onafterscroll 当结束一次滚动时触发该事件，该事件的event参数中可以得到四个属性：index:当前需要滚动的索引, scrollOffset:滚动到可视区域的位置, direction:滚动方向, scrollUnit:需要滚动过多少个项
 * @config {String} onprev 当翻到前一项或前一页时触发该事件
 * @config {String} onnext 当翻到下一项或下一页时触发该事件
 * @author linlingyu
 */



baidu.ui.Carousel = baidu.ui.createUI(function(options) {
    var me = this,
        data = me.contentText || [];
    me._dataList = data.slice(0, data.length);
    me._itemIds = [];
    me._items = {};//用来存入被删除的节点，当再次被使用时可以直接拿回来,格式:{element: dom, handler: []}
    me.flip = me.flip.toLowerCase();
    me.orientation = me.orientation.toLowerCase();
}).extend(
    /**
     *  @lends baidu.ui.Carousel.prototype
     */
{
    uiType: 'carousel',
    orientation: 'horizontal',//horizontal|vertical
    //direction: 'down',//up|right|down|left
    flip: 'item',//item|page
    pageSize: 3,
    scrollIndex: 0,
    _axis: {
        horizontal: {vector: '_boundX', pos: 'left', size: 'width', offset: 'offsetWidth', client: 'clientWidth', scrollPos: 'scrollLeft'},
        vertical: {vector: '_boundY', pos: 'top', size: 'height', offset: 'offsetHeight', client: 'clientHeight', scrollPos: 'scrollTop'}
    },
    /**
     * 生成一个容器的字符串
     * @return {String}
     * @private
     */
    getString: function() {
        var me = this,
            tpl = '<div id="#{id}" class="#{class}">#{content}</div>',
            str = baidu.string.format(tpl, {
                id: me.getId('scroll'),
                'class': me.getClass('scroll')
            });
        return baidu.string.format(tpl, {
            id: me.getId(),
            'class': me.getClass(),
            content: str
        });
    },
    /**
     * 渲染滚动组件到参数指定的容器中
     * @param {HTMLElement} target 一个用来存放组件的容器对象.
     */
    render: function(target) {
        var me = this;
        if (!target || me.getMain()) {return;}
        //先把已经存在的dataList生成出来guid
        baidu.array.each(me._dataList, function(item) {
	        me._itemIds.push(baidu.lang.guid());
	    });
        baidu.dom.insertHTML(me.renderMain(target), 'beforeEnd', me.getString());
        me._renderItems();
        me._resizeView();
        me._moveToMiddle();
        me.focus(me.scrollIndex);
        me.addEventListener('onbeforeendscroll', function(evt) {
            var orie = me.orientation == 'horizontal',
                axis = me._axis[me.orientation],
                sContainer = me.getScrollContainer();
            me._renderItems(evt.index, evt.scrollOffset);
{'fraction_non_alphanumeric': 0.16274089935760172, 'fraction_numerical': 0.0029443254817987153, 'mean_word_length': 3.0329195898542904, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5539876', 'n_tokens_mistral': 2968, 'n_tokens_neox': 3145, 'n_words': 462}