One feature that has been very important for us and colleagues I've spoken with is the ability to do a multi-line paste, and Smartclient's current capability in this is not great (i.e., a separate pop-up window). The reason is because users need to fill in a ListGrid and data is often coming from things like an xlsx or text file they can copy from. It's tedious and error prone to expect them to copy/paste one cell at a time.
I'd be happy for Isomorphic to vet and integrate functionality like this:
	
 
							
						
					I'd be happy for Isomorphic to vet and integrate functionality like this:
Code:
	
	    pasteTextFromClipboard: function(e) {
        var selection = this.selection.getSelectedCells();
        if (selection.length != 1) {
            return true;
        }
        var pastedText = undefined;
        if (window.clipboardData && window.clipboardData.getData) { // IE
            pastedText = window.clipboardData.getData('Text');
        } else if (e.clipboardData && e.clipboardData.getData) {
            pastedText = e.clipboardData.getData('text/plain');
        } else {
            return true;
        }
        var rowSep = null;
        var colSep = null;
        if(pastedText.indexOf(String.fromCharCode(13)) != -1){
            rowSep = String.fromCharCode(13);
            colSep = String.fromCharCode(9);
        } else {
            rowSep = /\r?\n/;
            colSep = ",";
        }
        var lines = pastedText.split(rowSep);
        var r = selection[0][0];
        var c = selection[0][1];
        for(var i=0; i<lines.length; i++){
            if(r >= this.getTotalRows()){
                break;
            }
            var cols = lines[i].split(colSep);
            for(var j=0; j<cols.length; j++) {
                var col = c+j;
                var fieldName = this.getFieldName(col);
                if(!fieldName){
                    break;
                }
                this.setEditValue(r, col, cols[j]);
                this.validateCell(r,fieldName);
            }
            var record = this.getRecord(r);
            this.markRecordChanged(record);
            r++;
        }
        this.endEditing();
        return false;
    },
            draw: function(){
                this.Super("draw", arguments);
                var listGrid = this;
                var lgDiv = this.getContentElement();
                if(lgDiv == null){
                    console.log("lgDiv is null!");
                    return;
                }
                lgDiv.onpaste = function(e) {
                    return listGrid.pasteTextFromClipboard(e);
                };
            }
Comment