Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// ui elements
var uploadDialog = false;
var bundlesTable    = false;
var bundlesBody     = false;
var bundlesTemplate = false;
var bundleOpError   = false;
var bundleOpSuccess = false;

function renderData( eventData, filter )  {
	lastBundleData = eventData;
	var s = eventData.s;
	var statline = i18n.statlinePrefix + ' ' + i18n.statlineTotal.msgFormat(s[0]);
	if ( s[0] == s[1] || s[0] == s[1] + s[2]) {
		statline += ' - ' + i18n.statlineAll.msgFormat(s[0]);
	} else {
		if ( s[1] > 0 ) {
			statline += ', ' + i18n.statlineActive.msgFormat(s[1]);
		}
		if ( s[2] > 0 ) {
			statline += ', ' + i18n.statlineFragments.msgFormat(s[2]);
		}
		if ( s[3] > 0 ) {
			statline += ', ' + i18n.statlineResolved.msgFormat(s[3]);
		}
		if ( s[4] > 0 ) {
			statline += ', ' + i18n.statlineInstalled.msgFormat(s[4]);
		}
	}
    $('.statline').html(statline);
	bundlesBody.empty();
    for ( var idx in eventData.data ) {
        if ( currentBundle == null || !drawDetails || currentBundle == eventData.data[idx].id) {
            entry( eventData.data[idx], filter );
        }
    }
    if ( drawDetails && eventData.data.length == 1 ) {
		$('.filterBox input, .filterBox button').addClass('ui-state-disabled');
        renderDetails(eventData.data[0]);    
    } else if ( currentBundle != null ) {
        var id = currentBundle;
        hideDetails(id);
        showDetails(id);
    }
    initStaticWidgets();

	var cv = getCookie("bundlelist");
	if (cv && bundlesTable.find("tr").size() > 1) {
	    bundlesTable.trigger('sorton', [cv]);
	}

	if (bundlesBody.find('tr').size() == 0) {
		bundlesBody.html('<tr><td colspan="6">' + i18n.filterNoMatch + '</td></tr>');
	}

	// show dialog on error
	if (eventData.error) bundleOpError.dialog('open').find('pre').text(eventData.error)
}

function entry( /* Object */ bundle, filter ) {
	var matches = !(filter && typeof filter.test == 'function') ? true :
		filter.test(bundle.id) || filter.test(bundle.name) || filter.test(bundle.symbolicName) || filter.test(bundle.version) || filter.test(bundle.category);

	if (matches) entryInternal( bundle ).appendTo(bundlesBody);
}

function hasStart(b) { return (!b.fragment) && (b.stateRaw == 2 || b.stateRaw == 4) } // !isFragment && (installed | resolved)
function hasStop(b)  { return (!b.fragment) && (b.stateRaw == 32) } // !isFragment && active
function hasUninstall(b)  { return b.stateRaw == 2 || b.stateRaw == 4 || b.stateRaw == 32 } // installed | resolved | active
function stateString(b) {
	var s = b.stateRaw;
	return  b.fragment && s == 4 ? 
		i18n.state.fragment : // fragment & resolved
		i18n.state[s] ? i18n.state[s] : i18n.state.unknown.msgFormat(s)
}

function entryInternal( /* Object */ bundle ) {
	var tr = bundlesTemplate.clone();
    var id = bundle.id;
    var name = bundle.name + '<span class="symName">' + bundle.symbolicName + '</span>';

	tr.attr('id', 'entry'+id);
	tr.children('td:eq(0)').text(id);
	tr.find('.bIcon').attr('id', 'img'+id).click(function() {showDetails(id)});
	tr.find('.bName').html( drawDetails ? name : '<a href="' + pluginRoot + '/' + id + '">' + name + '</a>' );
	tr.children('td:eq(2)').text( bundle.version );
	tr.children('td:eq(3)').text( bundle.category );
	if (id == 0) { // system bundle has no actions
		tr.children('td:eq(4)').text( stateString(bundle) );
		tr.children('td:eq(5)').find('ul').addClass('ui-helper-hidden');
	} else {
		entrySetupState( bundle, tr, id );
	}
	return tr;
}
function entrySetupState( /* Object */ bundle, tr, id) {
	var start   = tr.children('td:eq(5)').find('ul li:eq(0)').removeClass('ui-helper-hidden').unbind('click');
	var stop    = tr.children('td:eq(5)').find('ul li:eq(1)').removeClass('ui-helper-hidden').unbind('click');
	var refresh = tr.children('td:eq(5)').find('ul li:eq(2)').unbind('click').click(function() {return changeDataEntryState(id, 'refresh')});
	var update  = tr.children('td:eq(5)').find('ul li:eq(3)').unbind('click').click(function() {return changeDataEntryState(id, 'update')});
	var remove  = tr.children('td:eq(5)').find('ul li:eq(4)').removeClass('ui-helper-hidden').unbind('click');
	start = hasStart(bundle) ?
		start.click(function() {return changeDataEntryState(id, 'start')}) :
		start.addClass('ui-helper-hidden');
	stop = hasStop(bundle) ?
		stop.click(function() {return changeDataEntryState(id, 'stop')}) :
		stop.addClass('ui-helper-hidden');
	remove = hasUninstall(bundle) ?
		remove.click(function() {return changeDataEntryState(id, 'uninstall')}) :
		remove.addClass('ui-helper-hidden');
	tr.children('td:eq(4)').text( stateString(bundle) );
}

function loadData() {
    $.get(pluginRoot + "/.json", null, renderData, "json"); 
}

function changeDataEntryState(/* long */ id, /* String */ action) {
    $.post(pluginRoot + '/' + id, {'action':action}, function(b) {
		var _tr = bundlesBody.find('#entry' + id);
		if (1 == b.stateRaw)  { // uninstalled
			_tr.remove(); 
		} else {
			entrySetupState( b, _tr, id );
		}
		if ('refresh' == action || 'update' == action) {
			bundleOpSuccess.dialog('open');
			// TODO:
			
		}
	}, 'json');
	return false;
}

function refreshPackages() {
    $.post(pluginRoot, {"action": "refreshPackages"}, renderData, "json"); 
}

function showDetails( id ) {
    currentBundle = id;
    $.get(pluginRoot + "/" + id + ".json", null, function(data) {
        renderDetails(data.data[0]);
    }, "json");
}

function hideDetails( id ) {
    currentBundle = null;
    $("#img" + id).each(function() {
        $("#pluginInlineDetails" + id).remove();
        $(this).
            removeClass('ui-icon-triangle-1-w').//left
            removeClass('ui-icon-triangle-1-s').//down
            addClass('ui-icon-triangle-1-e').//right
            attr("title", "Details").
            unbind('click').click(function() {showDetails(id)});
    });
}

function renderDetails( data ) {
    $("#entry" + data.id + " > td").eq(1).append("<div id='pluginInlineDetails"  + data.id + "'/>");
    $("#img" + data.id).each(function() {
        if ( drawDetails ) {
            var ref = window.location.pathname;
            ref = ref.substring(0, ref.lastIndexOf('/'));
            $(this).
                removeClass('ui-icon-triangle-1-e').//right
                removeClass('ui-icon-triangle-1-s').//down
                addClass('ui-icon-triangle-1-w').//left
                attr("title", "Back").
                unbind('click').click(function() {window.location = ref});
        } else {
            $(this).
                removeClass('ui-icon-triangle-1-w').//left
                removeClass('ui-icon-triangle-1-e').//right
                addClass('ui-icon-triangle-1-s').//down
                attr("title", "Hide Details").
                unbind('click').click(function() {hideDetails(data.id)});
        }
    });
    $("#pluginInlineDetails" + data.id).append("<table border='0'><tbody></tbody></table>");
    var details = data.props;
    for (var idx in details) {
        var prop = details[idx];
        
        if (prop.key == 'nfo') {
        	$.each(prop.value, function(name, bundleInfo) {
        		var txt = '';
        		$.each(bundleInfo, function(idx, ie) {
        			txt += '<div title="' + makeSafe(ie.description) + '">';
        			if (ie.type == 'link' || ie.type == 'resource') {
        				txt += '<a href="' + ie.value + '">' + ie.name + '</a>';
        			} else {
        				txt += ie.name + " = " + ie.value;
        			}
        			txt += '</div>';
        		});
            	$("#pluginInlineDetails" + data.id + " > table > tbody").append( 
                		renderDetailsEntry(name, txt) );
        	});
        } else 
        	$("#pluginInlineDetails" + data.id + " > table > tbody").append( 
        		renderDetailsEntry(prop.key, prop.value) );
    }
}
function makeSafe(text) {
	return text.replace(/\W/g, function (chr) {
		return '&#' + chr.charCodeAt(0) + ';';
	});
};

function renderDetailsEntry(key, value) {
	var key18 = i18n[key] ? i18n[key] : key;
	var txt = "<tr><td class='aligntop' noWrap='true' style='border:0px none'>" + key18 + "</td><td class='aligntop' style='border:0px none'>";          
    if (value) {
        if ( key == 'Bundle Documentation' )  {
            txt += "<a href='" + value + "' target='_blank'>" + value + "</a>";
        } else  {
            if ( $.isArray(value) ) {
                var i = 0;
                for(var pi in value) {
                    var xv = value[pi];
                    if (i > 0) { txt = txt + "<br/>"; }
	                var span;
	                if (xv.substring(0, 6) == "INFO: ") {
	                	txt += "<span class='ui-state-info-text'>" + xv.substring(5) + "</span>";
	                } else if (xv.substring(0, 7) == "ERROR: ") {
	                	txt += "<span class='ui-state-error-text'>" + xv.substring(6) + "</span>";
	                } else {
	                	txt +=  xv;
	                }
                    i++;
                }
            } else {
                txt += value;
            }
        }
    } else {
        txt += "\u00a0";
    }
    return txt + "</td></tr>";
}


$(document).ready(function(){
	$('.refreshPackages').click(refreshPackages);
	$('.reloadButton').click(loadData);
	$('.installButton').click(function() {
		uploadDialog.dialog('open');
		return false;
	});

	bundleOpError = $('#bundleOpError').dialog({
		autoOpen: false,
		modal   : true,
		width   : '80%'
	});
	bundleOpError.parent().addClass('ui-state-error');
	bundleOpSuccess = $('#bundleOpSuccess').dialog({
		autoOpen: false,
		modal   : true,
		width   : '80%'
	});

	// filter
	$('.filterApply').click(function() {
		if ($(this).hasClass('ui-state-disabled')) return;
		var el = $(this).parent().find('input.filter');
		var filter = el.length && el.val() ? new RegExp(el.val()) : false;
		renderData(lastBundleData, filter);
	});
	$('.filterForm').submit(function() {
		$(this).find('.filterApply').click();
		return false;
	});
	$('.filterClear').click(function() {
		if ($(this).hasClass('ui-state-disabled')) return;
		$('input.filter').val('');
		loadData();
	});
	$('.filterLDAP').click(function() {
		if ($(this).hasClass('ui-state-disabled')) return;
		var el = $(this).parent().find('input.filter');
		var filter = el.val();
		if (filter) $.get(pluginRoot + '/.json', { 'filter' : filter }, renderData, 'json');
		return false;
	});

	// upload dialog
	var uploadDialogButtons = {};
	uploadDialogButtons[i18n.install_update] = function() {
		$(this).find('form').submit();
	}
	uploadDialog = $('#uploadDialog').dialog({
		autoOpen: false,
		modal   : true,
		width   : '50%',
		buttons : uploadDialogButtons
	});

	// check for cookie
	bundlesTable = $("#plugin_table").tablesorter({
		headers: {
			0: { sorter:"digit" },
			5: { sorter: false }
		},
		textExtraction:mixedLinksExtraction
	}).bind("sortEnd", function(/* Event */ e) {
        var t = e.target.config;
        if (t && t.sortList) {
            setCookie("bundlelist", t.sortList);
        }
    });
	bundlesBody     = bundlesTable.find('tbody');
	bundlesTemplate = bundlesBody.find('tr').clone();

	renderData(lastBundleData);
});

New to GrepCode? Check out our FAQ X