1. #611
    Ext User
    Join Date
    Sep 2009
    Posts
    11
    Vote Rating
    0
    scooter is on a distinguished road

      0  

    Default Proper way to handle events

    Proper way to handle events


    Howdy,

    I have a tbar that has 3 filter mechanisms, date, combobox and this excellent plugin.
    I want to clear the other two search field values if they use grid.Search. What is the
    proper way to accomplish this?

    thanks

  2. #612
    Sencha - Community Support Team jsakalos's Avatar
    Join Date
    Apr 2007
    Location
    Slovakia
    Posts
    27,137
    Vote Rating
    321
    jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future jsakalos has a brilliant future

      0  

    Default


    Create sequence function of onTriggerClear method of the plugin and put your code in it.

  3. #613
    Ext User
    Join Date
    Sep 2009
    Posts
    11
    Vote Rating
    0
    scooter is on a distinguished road

      0  

    Default


    Thanks, Saki.

    For the benefit of others, this is what I ended up doing:

    Code:
    Ext.getCmp('maingrid').plugins[0].field.on('blur',function() {
        Ext.getCmp('startdate').setValue('');
        Ext.getCmp('startdate').reset();
        Ext.getCmp('enddate').setValue('');
        Ext.getCmp('enddate').reset();
        filter_combo.clearValue();
     })
    ;
    I also did on for specialkey on ENTER.

    thanks

  4. #614
    Ext User
    Join Date
    Sep 2009
    Posts
    11
    Vote Rating
    0
    scooter is on a distinguished road

      0  

    Default


    More help for others.....

    At first I didn't understand what you meant by the create sequence. But,
    because I had found another way around my problem I dropped it. But then
    today I was trying to set up the clear routines on a tabpanel that hadn't yet
    been rendered, so of course the above didn't work because it was trying to
    work on an object that didn't yet exist. So after some reading:

    http://www.extjs.com/deploy/ext/docs...createSequence
    And a lot of reading of the forums, I arrived at this solution:

    Code:
     gridSearchint.onTriggerSearch =  gridSearchint.onTriggerSearch.createSequence(function ()  
          {
              project_filter_combo.clearValue();
              Ext.getCmp('startdate_int').setValue('');
              Ext.getCmp('startdate_int').reset();
              Ext.getCmp('enddate_int').setValue('');
              Ext.getCmp('enddate_int').reset();
           })
    So thanks again for the pointer. Hopefully someone else will find this useful.

  5. #615

  6. #616
    Sencha User
    Join Date
    Sep 2007
    Location
    Los Angeles
    Posts
    14
    Vote Rating
    0
    fangstern is on a distinguished road

      0  

    Question TwinTriggerField does not render

    TwinTriggerField does not render


    Hi Saki,

    First of all, I want to said great work in gridsearch plugin. However, there maybe some bug with it. I've implemented it in a grid of an inactive tab. The TwinTriggerField does not render on load, but the search button does. If I activated that tab on load, then the TwinTriggerField renders as expected. Any idea why?

  7. #617
    Sencha User charleshimmer's Avatar
    Join Date
    Jul 2008
    Location
    Austin, TX
    Posts
    329
    Vote Rating
    0
    charleshimmer is on a distinguished road

      0  

    Default


    Awesome plugin in Saki! Worked great for me in ExtJS 3.0.2.

  8. #618
    Sencha User charleshimmer's Avatar
    Join Date
    Jul 2008
    Location
    Austin, TX
    Posts
    329
    Vote Rating
    0
    charleshimmer is on a distinguished road

      0  

    Default


    In case this helps anybody else, I'm posting my version of the plugin.

    I found when using this plugin that the grid lost the selected row and it reset the scroll position after I cleared the search field.

    To fix this I kind of hacked the plugin (only hacked for local searches, but could easily be taken to work for remote as well). A more re-usable method might be to have the plugin fire some events for the grid to listen to and react appropriately.

    Anyways, I highlighted my hacks in red.
    Code:
    // vim: ts=4:sw=4:nu:fdc=4:nospell
    /*global Ext */
    /**
     * @class Ext.ux.grid.Search
     * @extends Ext.util.Observable
     *
     * Search plugin for Ext.grid.GridPanel, Ext.grid.EditorGrid ver. 2.x or subclasses of them
     *
     * @author    Ing. Jozef Sakáloš
     * @copyright (c) 2008, by Ing. Jozef Sakáloš
     * @date      <ul>
     * <li>17. January 2008<li>
     * <li>6. February 2009</li>
     * </ul>
     * @version   1.1.1
     * @revision  $Id: Ext.ux.grid.Search.js 650 2009-03-25 17:29:12Z jozo $
     *
     * @license Ext.ux.grid.Search is licensed under the terms of
     * the Open Source LGPL 3.0 license.  Commercial use is permitted to the extent
     * that the code/component(s) do NOT become part of another Open Source or Commercially
     * licensed development library or toolkit without explicit permission.
     *
     * <p>License details: <a href="http://www.gnu.org/licenses/lgpl.html"
     * target="_blank">http://www.gnu.org/licenses/lgpl.html</a></p>
     *
     * @forum     23615
     * @demo      http://gridsearch.extjs.eu
     * @download
     * <ul>
     * <li><a href="http://gridsearch.extjs.eu/gridsearch.tar.bz2">gridsearch.tar.bz2</a></li>
     * <li><a href="http://gridsearch.extjs.eu/gridsearch.tar.gz">gridsearch.tar.gz</a></li>
     * <li><a href="http://gridsearch.extjs.eu/gridsearch.zip">gridsearch.zip</a></li>
     * </ul>
     *
     * @donate
     * <form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
     * <input type="hidden" name="cmd" value="_s-xclick">
     * <input type="hidden" name="hosted_button_id" value="3430419">
     * <input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-butcc-donate.gif"
     * border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
     * <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
     * </form>
     */
    
    Ext.ns('Ext.ux.grid');
    
    // Check RegExp.escape dependency
    if ('function' !== typeof RegExp.escape) {
        throw ('RegExp.escape function is missing. Include Ext.ux.util.js file.');
    }
    
    /**
     * Creates new Search plugin
     * @constructor
     * @param {Object} A config object
     */
    Ext.ux.grid.Search = function (config) {
        Ext.apply(this, config);
        Ext.ux.grid.Search.superclass.constructor.call(this);
    }; // eo constructor
    Ext.extend(Ext.ux.grid.Search, Ext.util.Observable, {
        /**
         * @cfg {Boolean} autoFocus Try to focus the input field on each store load if set to true (defaults to undefined)
         */
    
        /**
         * @cfg {String} searchText Text to display on menu button
         */
        searchText: 'Search'
    
        /**
         * @cfg {String} searchTipText Text to display as input tooltip. Set to '' for no tooltip
         */
        ,
        searchTipText: 'Type a text to search and press Enter'
    
        /**
         * @cfg {String} selectAllText Text to display on menu item that selects all fields
         */
        ,
        selectAllText: 'Select All'
    
        /**
         * @cfg {String} position Where to display the search controls. Valid values are top and bottom
         * Corresponding toolbar has to exist at least with mimimum configuration tbar:[] for position:top or bbar:[]
         * for position bottom. Plugin does NOT create any toolbar.(defaults to "bottom")
         */
        ,
        position: 'bottom'
    
        /**
         * @cfg {String} iconCls Icon class for menu button (defaults to "icon-magnifier")
         */
        ,
        iconCls: 'icon-magnifier'
    
        /**
         * @cfg {String/Array} checkIndexes Which indexes to check by default. Can be either 'all' for all indexes
         * or array of dataIndex names, e.g. ['persFirstName', 'persLastName'] (defaults to "all")
         */
        ,
        checkIndexes: 'all'
    
        /**
         * @cfg {Array} disableIndexes Array of index names to disable (not show in the menu), e.g. ['persTitle', 'persTitle2']
         * (defaults to [] - empty array)
         */
        ,
        disableIndexes: []
    
        /**
         * Field containing search text (read-only)
         * @property field
         * @type {Ext.form.TwinTriggerField}
         */
    
        /**
         * @cfg {String} dateFormat How to format date values. If undefined (the default)
         * date is formatted as configured in colummn model
         */
    
        /**
         * @cfg {Boolean} showSelectAll Select All item is shown in menu if true (defaults to true)
         */
        ,
        showSelectAll: true
    
        /**
         * Menu containing the column module fields menu with checkboxes (read-only)
         * @property menu
         * @type {Ext.menu.Menu}
         */
    
        /**
         * @cfg {String} menuStyle Valid values are 'checkbox' and 'radio'. If menuStyle is radio
         * then only one field can be searched at a time and selectAll is automatically switched off.
         * (defaults to "checkbox")
         */
        ,
        menuStyle: 'checkbox'
    
        /**
         * @cfg {Number} minChars Minimum characters to type before the request is made. If undefined (the default)
         * the trigger field shows magnifier icon and you need to click it or press enter for search to start. If it
         * is defined and greater than 0 then maginfier is not shown and search starts after minChars are typed.
         * (defaults to undefined)
         */
    
        /**
         * @cfg {String} minCharsTipText Tooltip to display if minChars is > 1
         */
        ,
        minCharsTipText: 'Type at least {0} characters'
    
        /**
         * @cfg {String} mode Use 'remote' for remote stores or 'local' for local stores. If mode is local
         * no data requests are sent to server the grid's store is filtered instead (defaults to "remote")
         */
        ,
        mode: 'remote'
    
        /**
         * @cfg {Array} readonlyIndexes Array of index names to disable (show in menu disabled), e.g. ['persTitle', 'persTitle2']
         * (defaults to undefined)
         */
    
        /**
         * @cfg {Number} width Width of input field in pixels (defaults to 100)
         */
        ,
        width: 100
    
        /**
         * @cfg {String} xtype xtype is usually not used to instantiate this plugin but you have a chance to identify it
         */
        ,
        xtype: 'gridsearch'
    
        /**
         * @cfg {Object} paramNames Params name map (defaults to {fields:"fields", query:"query"}
         */
        ,
        paramNames: {
            fields: 'fields',
            query: 'query'
        }
    
        /**
         * @cfg {String} shortcutKey Key to fucus the input field (defaults to r = Sea_r_ch). Empty string disables shortcut
         */
        ,
        shortcutKey: ''
    
        /**
         * @cfg {String} shortcutModifier Modifier for shortcutKey. Valid values: alt, ctrl, shift (defaults to "alt")
         */
        ,
        shortcutModifier: 'alt'
    
        /**
         * @cfg {String} align "left" or "right" (defaults to "left")
         */
    
        /**
         * @cfg {Number} minLength Force user to type this many character before he can make a search
         * (defaults to undefined)
         */
    
        /**
         * @cfg {Ext.Panel/String} toolbarContainer Panel (or id of the panel) which contains toolbar we want to render
         * search controls to (defaults to this.grid, the grid this plugin is plugged-in into)
         */
    
        ,
        selectedRow: false
    
        // {{{
        /**
         * @private
         * @param {Ext.grid.GridPanel/Ext.grid.EditorGrid} grid reference to grid this plugin is used for
         */
        ,
        init: function (grid) {
            this.grid = grid;
    
            // setup toolbar container if id was given
            if ('string' === typeof this.toolbarContainer) {
                this.toolbarContainer = Ext.getCmp(this.toolbarContainer);
            }
    
            // do our processing after grid render and reconfigure
            grid.onRender = grid.onRender.createSequence(this.onRender, this);
            grid.reconfigure = grid.reconfigure.createSequence(this.reconfigure, this);
        } // eo function init
        // }}}
        // {{{
        /**
         * adds plugin controls to <b>existing</b> toolbar and calls reconfigure
         * @private
         */
        ,
        onRender: function () {
            var panel = this.toolbarContainer || this.grid;
            var tb = 'bottom' === this.position ? panel.bottomToolbar : panel.topToolbar;
    
            // add menu
            this.menu = new Ext.menu.Menu();
    
            // handle position
            if ('right' === this.align) {
                tb.addFill();
            }
            else {
                if (0 < tb.items.getCount()) {
                    tb.addSeparator();
                }
            }
    
            // add menu button
            tb.add({
                text: this.searchText,
                menu: this.menu,
                iconCls: this.iconCls
            });
    
            // add input field (TwinTriggerField in fact)
            this.field = new Ext.form.TwinTriggerField({
                width: this.width,
                id: 'search',
                selectOnFocus: undefined === this.selectOnFocus ? true : this.selectOnFocus,
                trigger1Class: 'x-form-clear-trigger',
                trigger2Class: this.minChars ? 'x-hide-display' : 'x-form-search-trigger',
                onTrigger1Click: this.onTriggerClear.createDelegate(this),
                onTrigger2Click: this.minChars ? Ext.emptyFn : this.onTriggerSearch.createDelegate(this),
                minLength: this.minLength
            });
    
            // install event handlers on input field
            this.field.on('render', function () {
                // register quick tip on the way to search
                if (undefined === this.minChars || 1 < this.minChars) {
                    Ext.QuickTips.register({
                        target: this.field.el,
                        text: this.minChars ? String.format(this.minCharsTipText, this.minChars) : this.searchTipText
                    });
                }
    
                if (this.minChars) {
                    this.field.el.on({
                        scope: this,
                        buffer: 300,
                        keyup: this.onKeyUp
                    });
                }
    
                // install key map
                var map = new Ext.KeyMap(this.field.el, [{
                    key: Ext.EventObject.ENTER,
                    scope: this,
                    fn: this.onTriggerSearch
                },
                {
                    key: Ext.EventObject.ESC,
                    scope: this,
                    fn: this.onTriggerClear
                }]);
                map.stopEvent = true;
            },
            this, {
                single: true
            });
    
            tb.add(this.field);
    
            // reconfigure
            this.reconfigure();
    
            // keyMap
            if (this.shortcutKey && this.shortcutModifier) {
                var shortcutEl = this.shortcutEl || this.grid.getEl();
                var shortcutCfg = [{
                    key: this.shortcutKey,
                    scope: this,
                    stopEvent: true,
                    fn: function () {
                        this.field.focus();
                    }
                }];
                shortcutCfg[0][this.shortcutModifier] = true;
                this.keymap = new Ext.KeyMap(shortcutEl, shortcutCfg);
            }
    
            if (true === this.autoFocus) {
                this.grid.store.on({
                    scope: this,
                    load: function () {
                        this.field.focus();
                    }
                });
            }
        } // eo function onRender
        // }}}
        // {{{
        /**
         * field el keypup event handler. Triggers the search
         * @private
         */
        ,
        onKeyUp: function () {
            var length = this.field.getValue().toString().length;
            if (0 === length || this.minChars <= length) {
                this.onTriggerSearch();
            }
        } // eo function onKeyUp
        // }}}
        // {{{
        /**
         * Clear Trigger click handler
         * @private
         */
        ,
        onTriggerClear: function () {
            if (this.field.getValue()) {
                this.field.setValue('');
                this.field.focus();
                this.onTriggerSearch(true); // pass in true to flag that we're clearing
            }
        } // eo function onTriggerClear
        // }}}
        // {{{
        /**
         * Search Trigger click handler (executes the search, local or remote)
         * @private
         */
        ,
        onTriggerSearch: function (clear) {
            if (!this.field.isValid()) {
                return;
            }
            var val = this.field.getValue();
            var store = this.grid.store;
            var clear = clear || false;  // have clear flag default to false
    
            if (clear === false && this.selectedRow === false) { // if they are about to do a search and we haven't saved the currently selected row yet
                this.scrollState = this.grid.getView().getScrollState();
                this.selectedRow = this.grid.store.indexOf(this.grid.gsm.getSelected());
            }
    
            // grid's store filter
            if ('local' === this.mode) {
                store.clearFilter();
                if (val) {
                    store.filterBy(function (r) {
                        var retval = false;
                        this.menu.items.each(function (item) {
                            if (!item.checked || retval) {
                                return;
                            }
                            var rv = r.get(item.dataIndex);
                            rv = rv instanceof Date ? rv.format(this.dateFormat || r.fields.get(item.dataIndex).dateFormat) : rv;
                            var re = new RegExp(RegExp.escape(val), 'gi');
                            retval = re.test(rv);
                        },
                        this);
                        if (retval) {
                            return true;
                        }
                        return retval;
                    },
                    this);
                }
                else {}
            }
            // ask server to filter records
            else {
                // clear start (necessary if we have paging)
                if (store.lastOptions && store.lastOptions.params) {
                    store.lastOptions.params[store.paramNames.start] = 0;
                }
    
                // get fields to search array
                var fields = [];
                this.menu.items.each(function (item) {
                    if (item.checked) {
                        fields.push(item.dataIndex);
                    }
                });
    
                // add fields and query to baseParams of store
                delete(store.baseParams[this.paramNames.fields]);
                delete(store.baseParams[this.paramNames.query]);
                if (store.lastOptions && store.lastOptions.params) {
                    delete(store.lastOptions.params[this.paramNames.fields]);
                    delete(store.lastOptions.params[this.paramNames.query]);
                }
                if (fields.length) {
                    store.baseParams[this.paramNames.fields] = Ext.encode(fields);
                    store.baseParams[this.paramNames.query] = val;
                }
    
                // reload store
                store.reload();
            }
    
            if (clear === true) { // if they are clearing the search, restore selection to the stored row and then clear it by setting it to false
                this.grid.gsm.selectRow(this.selectedRow);
                this.grid.getView().restoreScroll(this.scrollState);
                this.selectedRow = false;
            }
    
        } // eo function onTriggerSearch
        // }}}
        // {{{
        /**
         * @param {Boolean} true to disable search (TwinTriggerField), false to enable
         */
        ,
        setDisabled: function () {
            this.field.setDisabled.apply(this.field, arguments);
        } // eo function setDisabled
        // }}}
        // {{{
        /**
         * Enable search (TwinTriggerField)
         */
        ,
        enable: function () {
            this.setDisabled(false);
        } // eo function enable
        // }}}
        // {{{
        /**
         * Disable search (TwinTriggerField)
         */
        ,
        disable: function () {
            this.setDisabled(true);
        } // eo function disable
        // }}}
        // {{{
        /**
         * (re)configures the plugin, creates menu items from column model
         * @private
         */
        ,
        reconfigure: function () {
    
            // {{{
            // remove old items
            var menu = this.menu;
            menu.removeAll();
    
            // add Select All item plus separator
            if (this.showSelectAll && 'radio' !== this.menuStyle) {
                menu.add(new Ext.menu.CheckItem({
                    text: this.selectAllText,
                    checked: !(this.checkIndexes instanceof Array),
                    hideOnClick: false,
                    handler: function (item) {
                        var checked = !item.checked;
                        item.parentMenu.items.each(function (i) {
                            if (item !== i && i.setChecked && !i.disabled) {
                                i.setChecked(checked);
                            }
                        });
                    }
                }), '-');
            }
    
            // }}}
            // {{{
            // add new items
            var cm = this.grid.colModel;
            var group = undefined;
            if ('radio' === this.menuStyle) {
                group = 'g' + (new Date).getTime();
            }
            Ext.each(cm.config, function (config) {
                var disable = false;
                if (config.header && config.dataIndex) {
                    Ext.each(this.disableIndexes, function (item) {
                        disable = disable ? disable : item === config.dataIndex;
                    });
                    if (!disable) {
                        menu.add(new Ext.menu.CheckItem({
                            text: config.header,
                            hideOnClick: false,
                            group: group,
                            checked: 'all' === this.checkIndexes,
                            dataIndex: config.dataIndex
                        }));
                    }
                }
            },
            this);
            // }}}
            // {{{
            // check items
            if (this.checkIndexes instanceof Array) {
                Ext.each(this.checkIndexes, function (di) {
                    var item = menu.items.find(function (itm) {
                        return itm.dataIndex === di;
                    });
                    if (item) {
                        item.setChecked(true, true);
                    }
                },
                this);
            }
            // }}}
            // {{{
            // disable items
            if (this.readonlyIndexes instanceof Array) {
                Ext.each(this.readonlyIndexes, function (di) {
                    var item = menu.items.find(function (itm) {
                        return itm.dataIndex === di;
                    });
                    if (item) {
                        item.disable();
                    }
                },
                this);
            }
            // }}}
        } // eo function reconfigure
        // }}}
    }); // eo extend
    // eof
    Last edited by charleshimmer; 23 Oct 2009 at 3:55 PM. Reason: typo

  9. #619
    Sencha User charleshimmer's Avatar
    Join Date
    Jul 2008
    Location
    Austin, TX
    Posts
    329
    Vote Rating
    0
    charleshimmer is on a distinguished road

      0  

    Default Ext Bug?

    Ext Bug?


    Found that the clear button is one pixel off in height in Safari.



    It looks like this line of css (ext-all.css line 1124) that is causing the problem. If I change it to 14px instead of 16px it looks good in FF and Safari.

    Code:
    .ext-strict .x-small-editor .x-form-text {
        height:16px !important;
    }
    Anybody know if this is a bug?

  10. #620
    Sencha User charleshimmer's Avatar
    Join Date
    Jul 2008
    Location
    Austin, TX
    Posts
    329
    Vote Rating
    0
    charleshimmer is on a distinguished road

      0  

    Default Multiple instances

    Multiple instances


    In case anybody else runs into this problem. I have 4 grids that need to have the search plugin in. Since the plugin comes with an id, you will run into problems unless you disable the plugin getting assigned an id.

    You can do this by commenting out this line.

    Code:
     // add input field (TwinTriggerField in fact)
            this.field = new Ext.form.TwinTriggerField({
                 width:this.width
                //,id:'search'
                ,selectOnFocus:undefined === this.selectOnFocus ? true : this.selectOnFocus
                ,trigger1Class:'x-form-clear-trigger'
                ,trigger2Class:this.minChars ? 'x-hide-display' : 'x-form-search-trigger'
                ,onTrigger1Click:this.onTriggerClear.createDelegate(this)
                ,onTrigger2Click:this.minChars ? Ext.emptyFn : this.onTriggerSearch.createDelegate(this)
                ,minLength:this.minLength
            });

Thread Participants: 244

  1. franklt69 (5 Posts)
  2. galdaka (2 Posts)
  3. thameema (1 Post)
  4. Dumbledore (3 Posts)
  5. JeffBurr (1 Post)
  6. berend (1 Post)
  7. mystix (1 Post)
  8. salvi (1 Post)
  9. cobnet (1 Post)
  10. dawesi (2 Posts)
  11. mysticav (3 Posts)
  12. mike1993 (3 Posts)
  13. JorisA (1 Post)
  14. cricri (5 Posts)
  15. apaa (1 Post)
  16. mbstroz (5 Posts)
  17. notjoshing (1 Post)
  18. MeDavid (1 Post)
  19. AlxH (1 Post)
  20. pantarhei (5 Posts)
  21. DeeZ (3 Posts)
  22. NBRed5 (2 Posts)
  23. zoq (2 Posts)
  24. ajaxE (4 Posts)
  25. cmendez21 (1 Post)
  26. Ronaldo (1 Post)
  27. mjlecomte (25 Posts)
  28. smokeman (11 Posts)
  29. Nam (4 Posts)
  30. keithnlarsen (2 Posts)
  31. rednix (2 Posts)
  32. expertmo (4 Posts)
  33. cking (1 Post)
  34. jelt (4 Posts)
  35. bcamp1973 (2 Posts)
  36. grgur (2 Posts)
  37. dwt11 (1 Post)
  38. michiel (3 Posts)
  39. Shmoo (3 Posts)
  40. evilized (1 Post)
  41. fangstern (1 Post)
  42. vishalg (3 Posts)
  43. Strati (1 Post)
  44. ArtBuilders (6 Posts)
  45. dax (5 Posts)
  46. thatcoder (7 Posts)
  47. jcar98 (1 Post)
  48. derbbre (3 Posts)
  49. wm003 (1 Post)
  50. garraS (3 Posts)
  51. kenshin (1 Post)
  52. ByteLess (2 Posts)
  53. Lobos (1 Post)
  54. a4 (1 Post)
  55. durlabh (3 Posts)
  56. elDub (1 Post)
  57. rstuven (1 Post)
  58. crpatrick (4 Posts)
  59. zedisdead (1 Post)
  60. vector4711 (1 Post)
  61. oanimashaun (1 Post)
  62. donssmith (3 Posts)
  63. sanjshah (5 Posts)
  64. nielsendev (2 Posts)
  65. Jika (2 Posts)
  66. Cooldream (2 Posts)
  67. iTzAngel (1 Post)
  68. franck34 (2 Posts)
  69. paubach (2 Posts)
  70. stewart (1 Post)
  71. teknaut (4 Posts)
  72. pjesus (2 Posts)
  73. NotChris (5 Posts)
  74. juicymedia (2 Posts)
  75. v496820 (2 Posts)
  76. hazooma (1 Post)
  77. obbakilla (1 Post)
  78. BlueCamel (1 Post)
  79. feodor (1 Post)
  80. w3bbuilder (1 Post)
  81. johnsbrn (1 Post)
  82. razor (1 Post)
  83. seppy (3 Posts)
  84. stefanorg (3 Posts)
  85. jimkan (1 Post)
  86. kenja (2 Posts)
  87. sandy (1 Post)
  88. eri.TsingTao (1 Post)
  89. rainydays (1 Post)
  90. iLiketoGrid (1 Post)
  91. Shaguar (8 Posts)
  92. AMS949 (3 Posts)
  93. moegal (3 Posts)
  94. aleczapka (2 Posts)
  95. Stripeman (6 Posts)
  96. abhaysingh (5 Posts)
  97. mango (1 Post)
  98. NoahK17 (3 Posts)
  99. Remy (1 Post)
  100. medley (11 Posts)
  101. stevchen (1 Post)
  102. abraxxa (28 Posts)
  103. Efex (3 Posts)
  104. Rotomaul (2 Posts)
  105. miihiir (4 Posts)
  106. nebbian (1 Post)
  107. Riri (6 Posts)
  108. catalina (1 Post)
  109. Bing Qiao (1 Post)
  110. juferoto (2 Posts)
  111. bk1 (2 Posts)
  112. sami_user (1 Post)
  113. dmcclean (2 Posts)
  114. Pink.ME (3 Posts)
  115. sebrand (1 Post)
  116. charak (2 Posts)
  117. charleshimmer (16 Posts)
  118. patrosmania (4 Posts)
  119. rosecorp (1 Post)
  120. johrisd (1 Post)
  121. aomadevelopers (1 Post)
  122. nicola_java (1 Post)
  123. BitPoet (1 Post)
  124. OliverT (3 Posts)
  125. randomuser01 (2 Posts)
  126. schone (3 Posts)
  127. perdar (1 Post)
  128. ajain (3 Posts)
  129. getindas (1 Post)
  130. giega (1 Post)
  131. ryanyoungsma (1 Post)
  132. ph0enix (1 Post)
  133. italianboy (1 Post)
  134. LutzAlbers (3 Posts)
  135. Ajish (2 Posts)
  136. christophe67 (1 Post)
  137. jmariani (4 Posts)
  138. wki01 (4 Posts)
  139. wemerson.januario (1 Post)
  140. viciuascuns (4 Posts)
  141. JohnnyWheels (1 Post)
  142. nar (3 Posts)
  143. shab (2 Posts)
  144. mystik (1 Post)
  145. unnamed_dev (1 Post)
  146. ScottLoney (3 Posts)
  147. whodat (4 Posts)
  148. Alex84 (7 Posts)
  149. mjmonserrat (3 Posts)
  150. andy_ghg (2 Posts)
  151. knappy (1 Post)
  152. bareflix (2 Posts)
  153. makiavelli (1 Post)
  154. daniel_82 (1 Post)
  155. peteryjk (2 Posts)
  156. michael.pedrotti (1 Post)
  157. elona (3 Posts)
  158. chinnapandu (1 Post)
  159. jsundquist (6 Posts)
  160. feo (1 Post)
  161. dubito (2 Posts)
  162. Georgioa (1 Post)
  163. SchattenMann (4 Posts)
  164. Relleum (1 Post)
  165. ivan.kristianto (3 Posts)
  166. yeyepot (1 Post)
  167. raydeen (1 Post)
  168. easycodes (4 Posts)
  169. rockinrandall (5 Posts)
  170. redcs (3 Posts)
  171. hatsu1119 (1 Post)
  172. surendra_leo (1 Post)
  173. ssawchenko (11 Posts)
  174. Sigma (3 Posts)
  175. Lmouse (1 Post)
  176. Spongerusher (1 Post)
  177. ValiBOSS (1 Post)
  178. joe123 (3 Posts)
  179. scooter (3 Posts)
  180. harsha_velicheti (1 Post)
  181. ivanleblanc (9 Posts)
  182. m4v0 (3 Posts)
  183. jbusuulwa (1 Post)
  184. seedeg (6 Posts)
  185. Z24_2000 (3 Posts)
  186. markw (2 Posts)
  187. atutus (2 Posts)
  188. luke82 (3 Posts)
  189. rameshkt (2 Posts)
  190. elgalle (2 Posts)
  191. Vepe (2 Posts)
  192. barser (2 Posts)
  193. metra (5 Posts)
  194. hotdesc (4 Posts)
  195. chrislovecnm (1 Post)
  196. King_Aero (1 Post)
  197. idefix (5 Posts)
  198. daiei27 (3 Posts)
  199. LostSoul (2 Posts)
  200. tumbochka (3 Posts)
  201. Dipish (7 Posts)
  202. mcafee (1 Post)
  203. alexpotemkin (1 Post)
  204. ruperty (5 Posts)
  205. Rbn_3d (2 Posts)
  206. rxopt (1 Post)
  207. mayurid (1 Post)
  208. jeroen_syntux (2 Posts)
  209. aminaq (4 Posts)
  210. sosy (3 Posts)
  211. asafm (2 Posts)
  212. extjs1111_user (4 Posts)
  213. scottmartin (2 Posts)
  214. clements (1 Post)
  215. wavedan (3 Posts)
  216. jizhang88 (2 Posts)
  217. Coil (2 Posts)
  218. Samuel.reed (6 Posts)
  219. sense.nda12 (1 Post)
  220. zoja (1 Post)
  221. andyproxis (1 Post)
  222. baldeep_bhatia (1 Post)
  223. stevwinata (1 Post)
  224. Patrick86 (1 Post)
  225. dumpf (3 Posts)
  226. parimala (3 Posts)
  227. vicvolk (4 Posts)
  228. preichow (1 Post)
  229. shaoming (1 Post)
  230. Ixtinkt (7 Posts)
  231. jadiagaurang (1 Post)
  232. Juanyong (1 Post)
  233. venkateshns (1 Post)
  234. panpur (3 Posts)
  235. codeart.ch (2 Posts)
  236. hieu79vn (1 Post)
  237. mvsrekha (2 Posts)
  238. aislan (1 Post)
  239. buhari (1 Post)
  240. extjsquicklearner (1 Post)
  241. shankar8rajah1 (1 Post)
  242. jacinth_1215 (2 Posts)
  243. venkikodakirthi (1 Post)
  244. bwgv (1 Post)

film izle

hd film izle

film sitesi

takipci kazanma sitesi

takipci kazanma sitesi

güzel olan herşey

takipci alma sitesi

komik eğlenceli videolar