Pkira
1/25/2016 - 12:01 PM

Drag and Drop List

Drag and Drop List

<div><i>Add topics corresponding to the forum category. Please drag topics to selected box.</i></div>
<p></p>

<table style="width: 100%;">
    <tr>
        <td width="50%"><label> Existent Topics</label> </td>
        <td width="50%"><label> Topics Choosen</label> </td>
    </tr>
</table>

<div style="width: 100%; vertical-align:top;">
    <div style="height:300px;overflow:auto;" align="left" id="divDragableGreen" ondrop="drop(event)" draggable="false" ondragover="dragOver(event)">
        @{
            var topics = Model.topics_used.Split(',');
            foreach (var item in Model.topics)
            {
                if (!topics.Any(x => x.ToString() == item.TopicId.ToString()))
                {
                    <a href="~#" onclick="return false" class="DragabbleBox" id="@(item.TopicId)">@item.Name</a>
                }
            }
        }
    </div>


    <div style="height:300px;overflow:auto;" align="right" id="divDragableBlue" ondrop="drop(event)" draggable="false" ondragover="dragOver(event)">
        @{
            foreach (var item in Model.topics)
            {
                if (topics.Any(x => x.ToString() == item.TopicId.ToString()))
                {
                    <a href="~#" onclick="return false" class="DragabbleBox" id="@(item.TopicId)">@item.Name</a>
                }
            }

        }
    </div>
</div>


<script type="text/javascript">

        $(function () {
            var draggedSrcElement = null;

            if (Modernizr.draganddrop) {
                var cols = $('.DragabbleBox');
                [].forEach.call(cols, function (col) {
                    col.setAttribute('draggable', true);
                    col.setAttribute('ondragstart', 'dragStart(event)');
                });
            } else {
                alert('Current browser dosen`t support drag and drop feature.');
            }
        });

        function dragOver(e) {
            if (e.preventDefault) {
                e.preventDefault(); // It allows us to drop the object.
            }
            return false;
    }

    function dragStart(e) {
        e.dataTransfer.setData('Text', e.target.outerHTML); //Capturing dragged object`s html in datatransfer onject
        draggedSrcElement = e.target; //keeping reference of the current object.
    }

    function drop(e) {
        e.preventDefault();
        var isElementAvailable = true;

        var ctrl = e.target;

        if (e.target.id != 'divDragableGreen' && e.target.id != 'divDragableBlue') {
            ctrl = e.target.parentElement;
        }

        $(ctrl).children().each(function () {

            var currentElementId = $(this)[0].id;

            if (currentElementId == "") {
                currentElementId = $(this)[0].parentElement.id;
            }

            if (currentElementId == draggedSrcElement.id) {
                isElementAvailable = false;
                return;
            }
        });

        if (isElementAvailable) {

            var data = e.dataTransfer.getData('Text');
            if (e.target.id == 'divDragableGreen' || e.target.id == 'divDragableBlue') {
                $('#' + e.target.id).append(data);
            }
            else {
                $('#' + e.target.parentElement.id).append(data);
            }

            $('#' + draggedSrcElement.parentNode.id).children().each(function () {
                if (this.id == draggedSrcElement.id) {

                    if (draggedSrcElement.parentNode.id == 'divDragableGreen') {
                        $('#topics_used').val($('#topics_used').val() + this.id.toString());
                        $('#topics_used').val($('#topics_used').val() + ',');
                    }
                    else {
                        $('#topics_used').val($('#topics_used').val().replace(this.id + ',', ''));
                    }
                    $(this).remove();
                }
            });
        }
        return false;
    }

</script>

<style type="text/css">
    .DragabbleBox {
        border: 1px solid black;
        margin: 2px;
        width: auto;
        background-image: url('/Images/user.png');
        background-repeat: no-repeat;
        text-align: left;
        vertical-align: baseline;
        padding-left: 57px;
        height: 50px;
        background-color: #D3DCE0;
        cursor: move;
        font-weight: 600;
        display: block;
        text-decoration: none;
    }

    #divDragableGreen, #divDragableBlue {
        border: 1px solid #aaaaaa;
        width: 49%;
        display: inline-block;
        min-height: 400px;
        vertical-align: top;
        text-align: left;
    }
</style>