Annotation of loncom/html/adm/quicksearch/quicksearch.js, revision 1.1

1.1     ! golterma    1: function applyFilter(thisdir) {
        !             2: 
        !             3:     var pattern = prepareSearchPattern();
        !             4:     var translations = jQuery.parseJSON(localStorage.getItem('CSTRtrans')).translations;
        !             5: 
        !             6:     updateDisplay(pattern, translations);
        !             7:     filterTableElements(pattern);
        !             8:     filterOtherElements(pattern, translations, thisdir);
        !             9: }
        !            10: 
        !            11: // called everytime the user makes an input into the search field
        !            12: function updateDisplay(pattern, translations) {
        !            13:     var header1 = document.getElementById('searchtitle');
        !            14: 
        !            15:     if (pattern.source == '(?:)'){
        !            16:         header1.style.display = 'none';
        !            17:     } else {
        !            18:         // remove escape symbol for better readability
        !            19:         header1.innerHTML = translations.results+' '+pattern.source.replace('\\','');
        !            20:         header1.style.display = '';
        !            21:     }
        !            22: }
        !            23: 
        !            24: // filters the contents table of the authoring space to only show matching resources in the current dir
        !            25: function filterTableElements(pattern) {
        !            26:     var list = document.getElementsByClassName('LC_data_table')[0].childNodes[1].children;
        !            27: 
        !            28:     // i=2 to skip searchtitle and header
        !            29:     for (var i = 2; i < list.length; i++){
        !            30:         // get filename: table column,     <span>,       <a>,       name
        !            31:         var resname = list[i].children[2].children[0].children[0].innerHTML;
        !            32:         var restitle;
        !            33: 
        !            34:         // check if resource has title and get it
        !            35:         var titleColumn = list[i].children[3].children;
        !            36: 
        !            37:         if (titleColumn.length > 2){
        !            38:             restitle = titleColumn[0].innerHTML;
        !            39:         } else {
        !            40:             restitle = '';
        !            41:         }
        !            42: 
        !            43:         // match in filename OR resource title OR if search string is empty
        !            44:         if ( pattern.test(resname) || pattern.test(restitle) || pattern.source == '' ){
        !            45:             list[i].style.display = '';     // show element
        !            46:         } else {
        !            47:             list[i].style.display = 'none'; // hide element
        !            48:         }
        !            49:     }
        !            50: }
        !            51: 
        !            52: // this is the search function for resources in other locations.
        !            53: // pattern - the search pattern given by the user
        !            54: // translations - loncapa generated translation object for the user interface
        !            55: // thisdir - dir the user is currently in, used to generate relativ links for found files
        !            56: function filterOtherElements (pattern, translations, thisdir) {
        !            57: 
        !            58:     var otherfiles = jQuery.parseJSON(sessionStorage.getItem('CSTRcache')).resources;
        !            59:     if (pattern.source == '(?:)'){
        !            60:         document.getElementById('otherplaces').style.display = 'none';
        !            61:         return;
        !            62:     }
        !            63: 
        !            64:     var hits = new Array();
        !            65:     for (var i = 0; i < otherfiles.length; i++){
        !            66:         if (otherfiles[i].title == '[untitled]'){
        !            67:             otherfiles[i].title = '';
        !            68:         }
        !            69: 
        !            70:         if ( pattern.test(otherfiles[i].name) || pattern.test(otherfiles[i].title) ){
        !            71:             hits.push(otherfiles[i]);
        !            72:         }
        !            73:     }
        !            74:     if (hits.length < 1){
        !            75:         document.getElementById('otherplaces').style.display = 'none';
        !            76:     } else {
        !            77:         document.getElementById('otherplaces').style.display = '';
        !            78:         var element = document.getElementsByName("otherplacescontent");
        !            79: 
        !            80:         // remove all old children
        !            81:         for (index = element.length - 1; index >= 0; index--){
        !            82:             element[index].parentNode.removeChild(element[index]);
        !            83:         }
        !            84: 
        !            85:         // add new children
        !            86:         for (var i = 0; i < hits.length; i ++){
        !            87:             document.getElementById('otherplacestable').parentNode.appendChild(renderRow(hits[i], i, translations, thisdir));
        !            88:         }
        !            89:     }
        !            90: }
        !            91: 
        !            92: // adds an row to the other places result table, used by filterOtherElements()
        !            93: function renderRow(element, i, translations, thisdir) {
        !            94:     var isdir = false;
        !            95:     var row = '';
        !            96: // icon
        !            97:     row += '<td>';
        !            98:     var extension = /\.(.+?)$/;
        !            99: 
        !           100:     if (element.name.match(extension)){
        !           101:         var allowed = ['avi','cab','doc','dvi','eps','exam','htm','html','jar','jpeg','jpg','library','mov','mpeg','mpg','page','pdf','png','ppt','problem','ps','qt','quiz','sequence','spreadsheet','survey','task','tex','text','tth','txt','wav','wmv','xls','xml','zip'];
        !           102:         var match = extension.exec(element.name)[1];
        !           103:         if (allowed.indexOf(match) > -1) {
        !           104:             // is supported file type
        !           105:             row += '<img src="/adm/lonIcons/'+match+'.gif" alt="" />';
        !           106:         } else {
        !           107:             // is some other file we dont have an icon for
        !           108:             row += '<img src="/adm/lonIcons/srvnull.gif" alt="" />';
        !           109:         }
        !           110:     } else {
        !           111:         // is a directory
        !           112:         isdir = true;
        !           113:         row += '<img src="/adm/lonIcons/navmap.folder.closed.gif" alt="" />';
        !           114:     }
        !           115: 
        !           116:     element.path = element.path.replace(/^\/home\/httpd\/html\//,'\/');
        !           117: 
        !           118: // directory
        !           119:     var location = element.path.replace(/\/priv\//,'');
        !           120:     if (location == ''){ location = '/'; }
        !           121:     row += '</td><td>';
        !           122:     if (isdir) {
        !           123:         row += '<a href="/priv/'+location+'" target="_parent"></a>';
        !           124:     } else {
        !           125:         row += '<a href="/priv/'+location+'" target="_parent">'+location.replace(/(.+?)\/(.+?)\//,'/')+'</a>';
        !           126:     }
        !           127:     row += '</td><td>';
        !           128: 
        !           129:     if (isdir) {
        !           130: 
        !           131:     // file link
        !           132:         row += '<span class="LC_filename"><a href="'+element.path+'/" target="_parent">'+element.name+'</a></span> <br />';
        !           133:         row += '</td><td></td>';
        !           134:     // status
        !           135:         row += '<td class="LC_browser_file_'+element.status+'">&nbsp;&nbsp;</td><td>'+translations.directory+'</td>';
        !           136:         row += '<td>'+element.cmtime+'</td></tr>';
        !           137:     } else {
        !           138:     
        !           139:     // file link
        !           140:         row += '<span class="LC_filename"><a href="'+element.path+element.name+'" target="_parent">'+element.name+'</a></span> <br />';
        !           141:     // editor
        !           142:         row += '(<a href="'+element.path+element.name+'?editmode=Edit&amp;problemmode=edit">'+translations.edit+'</a>)';
        !           143:     // xml editor
        !           144:         row += '(<a href="'+element.path+element.name+'?editmode=Edit&amp;problemmode=editxml">'+translations.editxml+'</a>)';
        !           145:         row += '</td><td>';
        !           146:     // edit metadata
        !           147:         row += '<a href="'+element.path+element.name+'.meta" target="cat">'+element.title+'</a><br />'
        !           148:         row += '<a href="'+element.path+element.name+'.meta">'+translations.editmeta+'</a>';
        !           149:         row += '</td>';
        !           150:     // status
        !           151:         row += '<td class="LC_browser_file_'+element.status+'">&nbsp;&nbsp;</td><td>'+translations[element.status]+'</td>';
        !           152:         row += '<td>'+element.cmtime+'</td></tr>';
        !           153:     }
        !           154: 
        !           155:     var result = document.createElement('tr');
        !           156:     result.innerHTML += row;
        !           157:     result.setAttribute('name', 'otherplacescontent');
        !           158: // set row style
        !           159:     if (i % 2 == 1){
        !           160:         result.setAttribute('class', 'LC_odd_row');
        !           161:     } else {
        !           162:         result.setAttribute('class', 'LC_even_row');
        !           163:     }
        !           164:     return result;
        !           165: }
        !           166: 
        !           167: // escapes the search pattern for on screen display
        !           168: function prepareSearchPattern() {
        !           169:     var searchstring = document.getElementById('quickfilter').value;
        !           170:     var regopt = document.getElementById('casesens').checked?'':'i';
        !           171: 
        !           172:     if (document.getElementById('regex').checked == false) {
        !           173:         searchstring = searchstring.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
        !           174:     } else {
        !           175:         // a single \ at the end would escape the closing / of the regex
        !           176:         searchstring = searchstring.replace(/\\$/, '\\\\');
        !           177:     }
        !           178:     return new RegExp(searchstring, regopt);
        !           179: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>