Changeset 13437


Ignore:
Timestamp:
Aug 18, 2012, 3:04:06 PM (9 years ago)
Author:
jordan
Message:

(trunk web) #5013 "WebUI Inspector file tree" -- use patch submitted by PsychoMario?

Location:
trunk/web/javascript
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/web/javascript/file-row.js

    r13436 r13437  
    173173                return (fields.torrent.getFileCount()>1) && !isDone();
    174174        };
     175        this.getPath = function () {
     176                var file = torrent.getFile(i);
     177        path = file.name.replace(/\/\/+/g,'/')
     178                path = path.split('/').slice(0,-1)
     179                path.push('t' + fields.torrent.getId() + 'f' + fields.index)
     180                return path
     181        };
    175182
    176183        initialize(torrent, i);
  • trunk/web/javascript/inspector.js

    r13392 r13437  
    504504        tor = torrents[0];
    505505
     506        for (parentid in data.parents) {
     507            data.parents[parentid] = $('#'+parentid).children('li').css('display')
     508        }
    506509        clearFileList();
    507510        data.file_torrent = tor;
     
    509512        data.file_rows = [];
    510513        fragment = document.createDocumentFragment();
    511 
     514                heirarchy = {'/':[]}
     515       
    512516        for (i=0; i<n; ++i) {
    513517            row = data.file_rows[i] = new FileRow(tor, i);
     
    515519                    $(row).bind('wantedToggled',onFileWantedToggled);
    516520                    $(row).bind('priorityToggled',onFilePriorityToggled);
    517         }
    518 
     521            path = row.getPath();
     522            if (path.length == 1) {
     523                heirarchy['/'].push(path[0]);
     524            } else {
     525                subheirarchy = heirarchy;
     526                for (j=0; j<path.length; j++) {
     527                    if (j<(path.length-1)) {
     528                        subheirarchy[path[j]] = (subheirarchy[path[j]] == undefined) ? {'/':[]} : subheirarchy[path[j]];
     529                        subheirarchy[path[j]]['PARENT'] = (path[j-1] == undefined) ? [undefined] : [path[j-1].replace(/[\[\] ().]/g,'_')]
     530                        subheirarchy = subheirarchy[path[j]];
     531                    } else {
     532                        parentid  = (path[j-1] == undefined) ? [undefined] : [path[j-1].replace(/[\[\] ().]/g,'_')]
     533                        subheirarchy['/'].push([path[j],parentid]);
     534                    }
     535                }
     536            }
     537        }
     538        /*
     539        At this point we have a single object containing the whole
     540        torrent heirarchy. The '/' key is file element ids as assigned above
     541        for the current level. Any other keys are array objects which are
     542        directories in the torrent heirarchy, this will also contain a '/'
     543        key and potentially more keys for nested directories.
     544        */
     545        connections = [];
     546        parents = {};
     547        var recursiveCreate = function(key,val) {
     548            if (key == "PARENT") { return; }
     549            if (typeof(val) == "object" &&! Array.isArray(val)) {
     550                row = document.createElement('li');
     551                row.id = key.replace(/[\[\] ().]/g,'_');
     552                row.classname = 'inspector_torrent_file_list_entry odd';
     553
     554                e = document.createElement('input');
     555                e.type = 'checkbox';
     556                e.className = "file_wanted_control";
     557                e.title = 'Download file';
     558                e.checked = true;
     559                $(e).change(function() { $($(this).parent()).children('li').children('input').click() });
     560                row.appendChild(e);
     561
     562                e = document.createElement('div');
     563                e.className = 'file-priority-radiobox';
     564                box = e;
     565
     566                        e = document.createElement('div');
     567                        e.className = 'low';
     568                        e.title = 'Low Priority';
     569                        $(e).click(function(){ $($(this).parent().parent()).children('li').children('div').children('.low').click() });
     570                        box.appendChild(e);
     571
     572                        e = document.createElement('div');
     573                        e.className = 'normal';
     574                        e.title = 'Normal Priority';
     575                        $(e).click(function(){ $($(this).parent().parent()).children('li').children('div').children('.normal').click() });
     576                        box.appendChild(e);
     577
     578                        e = document.createElement('div');
     579                        e.title = 'High Priority';
     580                        e.className = 'high';
     581                        $(e).click(function(){ $($(this).parent().parent()).children('li').children('div').children('.high').click() });
     582                        box.appendChild(e);
     583
     584                row.appendChild(box);
     585
     586                inner = document.createElement('div');
     587                inner.className = "inspector_torrent_file_list_entry_name";
     588                inner.innerHTML = key;
     589                row.appendChild(inner);
     590
     591                complete = document.createElement('div');
     592                complete.className = "inspector_torrent_file_list_entry_progress";
     593                complete.innerHTML = "&nbsp;"
     594                row.appendChild(complete)
     595
     596                fragment.appendChild(row);
     597                connections.push([key.replace(/[\[\] ().]/g,'_'),val['PARENT'][0]])
     598            } else {
     599                for (item in val) {
     600                    parents[val[item][1][0]] = ""
     601                }
     602                connections.push.apply(connections,val)
     603            }
     604            if (!Array.isArray(val)) {
     605                $.each(val,function(key,val) { recursiveCreate(key,val) })
     606            }
     607        }
     608        $.each(heirarchy,function(key,val) { recursiveCreate(key,val) })
    519609        file_list.appendChild(fragment);
     610        for (conn in connections) {
     611            from = connections[conn][0];
     612            to = connections[conn][1];
     613            if (to == undefined) { continue; }
     614            $('#'+from).appendTo($('#'+to));
     615            $('#'+from).css('margin-left','20px')
     616        }
     617        for (parentid in parents) {
     618            $($('.inspector_torrent_file_list_entry_name',$('#'+parentid))[0]).click(function() { $($(this).parent()).children('li').toggle(); })
     619
     620            sum = 0
     621            matches = $('#'+parentid).children('li').text().match(/\([^\)]+\)/g)
     622            if (matches == null) { continue; }
     623            matches.map(function(word) {return parseFloat(word.slice(1,-2)) }).map(function(perc) {sum+=perc})
     624            count = $('#'+parentid).children('li').text().match(/\([^\)]+\)/g).length
     625            totalcomplete = (sum/count).toFixed(1)
     626
     627            $($('.inspector_torrent_file_list_entry_progress',$('#'+parentid))[0]).text('('+totalcomplete+'%)')
     628        }
     629        for (parentid in data.parents) {
     630            $('#'+parentid).children('li').css('display',data.parents[parentid])
     631        }
     632        data.parents = parents;
    520633    },
    521634
Note: See TracChangeset for help on using the changeset viewer.