<commit_before>/*!
 * waterfall
 * http://wlog.cn/athena/waterfall/
 *
 * Copyright (c) 2013 bingdian
 * Licensed under the MIT license.
 */
/*global Handlebars: false */
;(function( $, window, document, undefined ) {
	
    "use strict";
	
    /*
     * defaults
     */
    var pluginName = 'waterfall',
        defaults = {
            itemCls: 'waterfall-item',  // 瀑布流数据块class
            prefix: 'waterfall', // 瀑布流元素前辍
            fitWidth: true, // 是否自适应父元素宽度
            colWidth: 240,  // 数据块每列宽度
            gutterWidth: 0, // 数据块水平间距
            gutterHeight: 0, // 数据块垂直间距
            align: 'center', // 数据块相对于容器对齐方式，'align', 'left', 'right'
            minCol: 1,  // 数据块最小列数
            maxCol: undefined,
            maxPage: undefined, // 最多显示多少页数据,默认undefined，无限下拉
            bufferPixel: -50, // 滚动时, 窗口底部到瀑布流最小高度列的距离 > bufferPixel时, 自动加载新数据
            containerStyle: { // 瀑布流元素样式
                position: 'relative'
            },
            resizable: true, // 缩放时是否触发数据重排?false时测试数据是否会自动加载
            isFadeIn: false, // 新插入数据是否使用fade动画
            isAnimated: false, // resize时数据是否显示动画
            checkImagesLoaded: true, // 图片加载完成后开始排列数据块，如果直接后台输出图片尺寸，设置为false
            animationOptions: { // 动画效果
            },
            isAutoPrefill: true,  // 当文档小于窗口可见区域，自动加载数据
            path: undefined, // 瀑布流数据分页url，可以是数组如["/popular/page/", "/"] => "/popular/page/1/"，或者是根据分页返回一个url方法如：function(page) { return '/populr/' + page; }
            dataType: 'json', //json, jsonp, html
            params: {}, //瀑布流数据请求参数
            
            loadingMsg: '<div style="text-align:center;padding:10px 0; color:#999;"><img src="data:image/gif;base64,R0lGODlhEAALAPQAAP///zMzM+Li4tra2u7u7jk5OTMzM1hYWJubm4CAgMjIyE9PT29vb6KiooODg8vLy1JSUjc3N3Jycuvr6+Dg4Pb29mBgYOPj4/X19cXFxbOzs9XV1fHx8TMzMzMzMzMzMyH5BAkLAAAAIf4aQ3JlYXRlZCB3aXRoIGFqYXhsb2FkLmluZm8AIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7" alt=""><br />Loading...</div>', // 加载提示，html
            
            state: { 
                isDuringAjax: false, 
                isProcessingData: false, //处理数据状态，从发送ajax请求开始到瀑布流数据排列结束
                isResizing: false,
                curPage: 1 //当前第几页，默认第一页
            },

            // callbacks
            callbacks: {
                /*
                 * ajax请求开始之前
                 * @param {Object} loading $('#waterfall-loading')
                 */
                loadingStart: function($loading) {
                    $loading.show();
                    //console.log('loading', 'start');
                },
                
                /*
                 * ajax请求加载完成
                 * @param {Object} loading $('#waterfall-loading')
                 * @param {Boolean} isBeyondMaxPage
                 */
                loadingFinished: function($loading, isBeyondMaxPage) {
                    if ( !isBeyondMaxPage ) {
                        $loading.fadeOut();
                        //console.log('loading finished');
                    } else {
                        //console.log('loading isBeyondMaxPage');
                        $loading.remove();
                    }
                },
                
                /*
                 * ajax请求出错误
                 * @param {String} xhr , end/failed
                 */
                loadingError: function(xhr) {
                },
                
                /*
                 * 处理ajax返回数方法
                 * @param {String} data
                 */
                renderData: function (data, dataType) {
                    var tpl,
                        template;
                        
                    if ( dataType === 'json' ||  dataType === 'jsonp'  ) { // json或jsonp格式
                        tpl = $('#waterfall-tpl').html();
                        template = Handlebars.compile(tpl);
                        
                        return template(data);
                    } else { // html格式
                        return data;
                    }
                }
            },
            
            debug: true
        };
    
    /*
     * Waterfall constructor
     */
    function Waterfall(element, options) {
        this.$element = $(element);
        this.options = $.extend(true, {}, defaults, options);
        this.colHeightArray = []; // 瀑布流各列高度数组
        this.styleQueue = []; 
        
        this._init();
    }
    
    
    Waterfall.prototype = {
        constructor: 'Waterfall',
        
        // Console log wrapper
        _debug: function () {
			if ( true !== this.options.debug ) {
				return;
			}

			if (typeof console !== 'undefined' && typeof console.log === 'function') {
				// Modern browsers
				// Single argument, which is a string
				if ((Array.prototype.slice.call(arguments)).length === 1 && typeof Array.prototype.slice.call(arguments)[0] === 'string') {
					console.log( (Array.prototype.slice.call(arguments)).toString() );
				} else {
					console.log( Array.prototype.slice.call(arguments) );
				}
			} else if (!Function.prototype.bind && typeof console !== 'undefined' && typeof console.log === 'object') {
				// IE8
				Function.prototype.call.call(console.log, console, Array.prototype.slice.call(arguments));
			}
        },
        
        
        /*
         * _init 初始化瀑布流
         * @callback {Object Function } 当实例再次被触发时回调函数 -> $el.waterfall();
         */
        _init: function( callback ) {
            var options = this.options,
                path = options.path;
                
            if ( !path ) { // 没有提供api
                this._debug('Invalid path');
                return;
            }
            
            this._setColumns();
            this._initContainer(); 
            this._resetColumnsHeightArray(); // 设置瀑布流高度数组
            this._reLayout( callback ); // 对已有数据块重排
            
            // auto prefill
            if ( options.isAutoPrefill ) {
				this._prefill();
			}
            
            //绑定事件
            this._doResize();
            this._doScroll();
        },
        
        /*
         * 初始化瀑布流容器<commit_msg>fixed resizable<commit_after>/*!
 * waterfall
 * http://wlog.cn/waterfall/
 *
 * Copyright (c) 2013 bingdian
 * Licensed under the MIT license.
 */
/*global Handlebars: false */
;(function( $, window, document, undefined ) {
	
    "use strict";
	
    /*
     * defaults
     */
    var pluginName = 'waterfall',
        defaults = {
            itemCls: 'waterfall-item',  // 瀑布流数据块class
            prefix: 'waterfall', // 瀑布流元素前辍
            fitWidth: true, // 是否自适应父元素宽度,false时，瀑布流宽度为当前元素宽度
            colWidth: 240,  // 瀑布流每列的宽度
            gutterWidth: 0, // 数据块水平间距
            gutterHeight: 0, // 数据块垂直间距
            align: 'center', // 数据块相对于容器对齐方式，'align', 'left', 'right'
            minCol: 1,  // 数据块最小列数
            maxCol: undefined, // 数据块最多显示列数,默认undefined，最大列数无限制
            maxPage: undefined, // 最多显示多少页数据,默认undefined，无限下拉
            bufferPixel: -50, // 滚动时, 窗口底部到瀑布流最小高度列的距离 > bufferPixel时, 自动加载新数据
            containerStyle: { // 瀑布流元素样式
                position: 'relative'
            },
            resizable: true, // 缩放时是否触发数据重排
            isFadeIn: false, // 新插入数据是否使用fade动画
            isAnimated: false, // resize时数据是否显示动画
            checkImagesLoaded: true, // 图片加载完成后开始排列数据块，如果直接后台输出图片尺寸，设置为false
            animationOptions: { // 动画效果
            },
            isAutoPrefill: true,  // 当文档小于窗口可见区域，自动加载数据
            path: undefined, // 瀑布流数据分页url，可以是数组如["/popular/page/", "/"] => "/popular/page/1/"，或者是根据分页返回一个url方法如：function(page) { return '/populr/' + page; }
            dataType: 'json', //json, jsonp, html
            params: {}, //瀑布流数据请求参数
            
            loadingMsg: '<div style="text-align:center;padding:10px 0; color:#999;"><img src="data:image/gif;base64,R0lGODlhEAALAPQAAP///<KEY>WPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I<KEY>" alt=""><br />Loading...</div>', // 加载提示，html
            
            state: { 
                isDuringAjax: false, 
                isProcessingData: false, //处理数据状态，从发送ajax请求开始到瀑布流数据排列结束
                isResizing: false,
                curPage: 1 //当前第几页，默认第一页
            },

            // callbacks
            callbacks: {
                /*
                 * ajax请求开始之前
                 * @param {Object} loading $('#waterfall-loading')
                 */
                loadingStart: function($loading) {
                    $loading.show();
                    //console.log('loading', 'start');
                },
                
                /*
                 * ajax请求加载完成
                 * @param {Object} loading $('#waterfall-loading')
                 * @param {Boolean} isBeyondMaxPage
                 */
                loadingFinished: function($loading, isBeyondMaxPage) {
                    if ( !isBeyondMaxPage ) {
                        $loading.fadeOut();
                        //console.log('loading finished');
                    } else {
                        //console.log('loading isBeyondMaxPage');
                        $loading.remove();
                    }
                },
                
                /*
                 * ajax请求出错误
                 * @param {String} xhr , end/failed
                 */
                loadingError: function(xhr) {
                },
                
                /*
                 * 处理ajax返回数方法
                 * @param {String} data
                 */
                renderData: function (data, dataType) {
                    var tpl,
                        template;
                        
                    if ( dataType === 'json' ||  dataType === 'jsonp'  ) { // json或jsonp格式
                        tpl = $('#waterfall-tpl').html();
                        template = Handlebars.compile(tpl);
                        
                        return template(data);
                    } else { // html格式
                        return data;
                    }
                }
            },
            
            debug: true
        };
    
    /*
     * Waterfall constructor
     */
    function Waterfall(element, options) {
        this.$element = $(element);
        this.options = $.extend(true, {}, defaults, options);
        this.colHeightArray = []; // 瀑布流各列高度数组
        this.styleQueue = []; 
        
        this._init();
    }
    
    
    Waterfall.prototype = {
        constructor: 'Waterfall',
        
        // Console log wrapper
        _debug: function () {
			if ( true !== this.options.debug ) {
				return;
			}

			if (typeof console !== 'undefined' && typeof console.log === 'function') {
				// Modern browsers
				// Single argument, which is a string
				if ((Array.prototype.slice.call(arguments)).length === 1 && typeof Array.prototype.slice.call(arguments)[0] === 'string') {
					console.log( (Array.prototype.slice.call(arguments)).toString() );
				} else {
					console.log( Array.prototype.slice.call(arguments) );
				}
			} else if (!Function.prototype.bind && typeof console !== 'undefined' && typeof console.log === 'object') {
				// IE8
				Function.prototype.call.call(console.log, console, Array.prototype.slice.call(arguments));
			}
        },
        
        
        /*
         * _init 初始化瀑布流
         * @callback {Object Function } 当实例再次被触发时回调函数 -> $el.waterfall();
         */
        _init: function( callback ) {
            var options = this.options,
                path = options.path;
                
            if ( !path ) { // 没有提供api
                this._debug('Invalid path');
                return;
            }
            
            this._setColumns();
            this._initContainer(); 
            this._resetColumnsHeightArray(); // 设置瀑布流高度数组
            this._reLayout( callback ); // 对已有数据块重排
            
            // auto prefill
            if ( options.isAutoPrefill ) {
				this._prefill();
			}
            
            //绑定事件
            if ( options.resizable ) {
                this._doResize();
            }
            this._doScroll();
        },
        
        /*
         * 初始化瀑布流容器
{'fraction_non_alphanumeric': 0.11425242718446602, 'fraction_numerical': 0.012970873786407768, 'mean_word_length': 1.4253155019777737, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 19, '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': '2080780', 'n_tokens_mistral': 4581, 'n_tokens_neox': 4429, 'n_words': 581}