CODEPOT
Web-based subversion manager
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">

<script type="text/javascript" src="<?php print base_url_make('/js/codepot.js')?>"></script>
<link type="text/css" rel="stylesheet" href="<?php print base_url_make('/css/common.css')?>" />
<link type="text/css" rel="stylesheet" href="<?php print base_url_make('/css/file.css')?>" />
<link type="text/css" rel="stylesheet" href="<?php print base_url_make('/css/font-awesome.min.css')?>" />

<script type="text/javascript" src="<?php print base_url_make('/js/creole.js')?>"></script>

<script type="text/javascript" src="<?php print base_url_make('/js/prettify/prettify.js')?>"></script>
<script type="text/javascript" src="<?php print base_url_make('/js/prettify/lang-css.js')?>"></script>
<script type="text/javascript" src="<?php print base_url_make('/js/prettify/lang-lisp.js')?>"></script>
<script type="text/javascript" src="<?php print base_url_make('/js/prettify/lang-lua.js')?>"></script>
<script type="text/javascript" src="<?php print base_url_make('/js/prettify/lang-sql.js')?>"></script>
<script type="text/javascript" src="<?php print base_url_make('/js/prettify/lang-vb.js')?>"></script>

<script type="text/javascript" src="<?php print base_url_make('/js/jquery.min.js')?>"></script>
<script type="text/javascript" src="<?php print base_url_make('/js/jquery-ui.min.js')?>"></script>
<link type="text/css" rel="stylesheet" href="<?php print base_url_make('/css/jquery-ui.css')?>" />

<?php
$hexname = $this->converter->AsciiToHex ($file->name);
$file_count = count ($file->file_list);

$creole_base = site_url() . "/wiki/show/{$project->id}/"; 
$creole_file_base = site_url() . "/wiki/attachment0/{$project->id}/"; 
?>

<script type="text/javascript">
function show_alert (outputMsg, titleMsg) 
{
	$('#file_show_alert').html(outputMsg).dialog({
		title: titleMsg,
		resizable: true,
		modal: true,
		width: 'auto',
		height: 'auto',
		buttons: {
			"OK": function () {
				$(this).dialog("close");
			}
		}
	});
}

function render_wiki()
{
	creole_render_wiki (
		"file_show_wiki_text", 
		"file_show_wiki", 
		"<?php print $creole_base; ?>",
		"<?php print $creole_file_base; ?>/",
		false
	);

	prettyPrint ();
}

function preview_edit_description (input_text)
{
	creole_render_wiki_with_input_text (
		input_text,
		"file_show_edit_description_preview", 
		"<?php print $creole_base; ?>",
		"<?php print $creole_file_base; ?>/",
		true // raw
	);

	prettyPrint ();
}

var populated_file_obj_for_adding = [];
var populated_file_max_for_adding = 0;

function populate_selected_files_for_adding_with (files)
{
	var file_desc = {};
	for (var n = 0; n < populated_file_max_for_adding; n++)
	{
		var f = populated_file_obj_for_adding[n];
		if (f != null)
		{
			var d = $('#file_show_add_file_desc_' + n);
			if (d != null) file_desc[f.name] = d.val();
		}
	}

	var file_table = $('#file_show_add_file_table');
	file_table.empty();
	populated_file_obj_for_adding = [];

	var f_no = 0;
	for (var n = 0; n < files.length; n++)
	{
		if (files[n] != null) 
		{
			var desc = file_desc[files[n].name];
			if (desc == null) desc = '';

			file_table.append (
				codepot_sprintf (
					'<tr id="file_show_add_file_row_%d"><td><a href="#" id="file_show_add_file_cancel_%d" onClick="cancel_out_add_file(%d); return false;"><i class="fa fa-trash"></i></a></td><td>%s</td><td><input type="text" id="file_show_add_file_desc_%d" size="40" value="%s" /></td></tr>', 
					f_no, f_no, f_no, codepot_htmlspecialchars(files[n].name), f_no, codepot_addslashes(desc)
				)
			);

			populated_file_obj_for_adding[f_no] = files[n];
			f_no++;
		}
	}

	populated_file_max_for_adding = f_no;
}

function populate_selected_files_for_adding ()
{
	return populate_selected_files_for_adding_with($('#file_show_add_files').get(0).files);
}

function cancel_out_add_file (no)
{
	$('#file_show_add_file_row_' + no).remove ();
	populated_file_obj_for_adding[no] = null;
}

function kill_edit_file (no)
{
	var n = $('#file_show_edit_file_name_' + no);
	var d = $('#file_show_edit_file_desc_' + no);
	if (n && d)
	{
		if (d.prop('disabled'))
		{
			n.css ('text-decoration', '');
			d.prop ('disabled', false);
		}
		else
		{
			n.css ('text-decoration', 'line-through');
			d.prop ('disabled', true);
		}
	}
}

var work_in_progress = false;

var original_file_name = [
	<?php
	for ($i = 0; $i < $file_count; $i++)
	{
		$f = $file->file_list[$i];
		printf ("%s\t'%s'", (($i == 0)? '': ",\n"), addslashes($f->filename));
	}
	print "\n";
	?>
];

var original_file_desc = [
	<?php
	for ($i = 0; $i < $file_count; $i++)
	{
		$f = $file->file_list[$i];
		printf ("%s\t'%s'", (($i == 0)? '': ",\n"), addslashes($f->description));
	}
	print "\n";
	?>
];

$(function () {
	$('#file_show_metadata').accordion({
		collapsible: true,
		heightStyle: "content"
	});

	$('#file_show_files').accordion({
		collapsible: true,
		heightStyle: "content"
	});


<?php if (isset($login['id']) && $login['id'] != ''): ?>

	$('#file_show_edit_description_tabs').tabs ();
	$('#file_show_edit_description_tabs').bind ('tabsshow', function (event, ui) {
		if (ui.index == 1) preview_edit_description ($('#file_show_edit_description').val());
	});

	$('#file_show_edit_form').dialog (
		{
			title: '<?php print $this->lang->line('Edit');?>',
			resizable: true,
			autoOpen: false,
			width: 'auto',
			height: 'auto',
			modal: true,
			buttons: {

				'<?php print $this->lang->line('OK')?>': function () {
					if (work_in_progress) return;

					if (!!window.FormData)
					{
						// FormData is supported
						work_in_progress = true;

						var form_data = new FormData();

						var new_name = $('#file_show_edit_name').val()

						form_data.append ('file_edit_name', new_name);
						form_data.append ('file_edit_tag', $('#file_show_edit_tag').val());
						form_data.append ('file_edit_description', $('#file_show_edit_description').val());

						$('#file_show_edit_form').dialog('disable');
						$.ajax({
							url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/file/xhr_update/{$project->id}/{$hexname}"; ?>'),
							type: 'POST',
							data: form_data,
							mimeType: 'multipart/form-data',
							contentType: false,
							processData: false,
							cache: false,

							success: function (data, textStatus, jqXHR) { 
								work_in_progress = false;
								$('#file_show_edit_form').dialog('enable');
								$('#file_show_edit_form').dialog('close');
								if (data == 'ok') 
								{
									// refresh the page to the head revision
									$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/file/show/{$project->id}/"; ?>' + codepot_string_to_hex(new_name)));
								}
								else
								{
									show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
								}
							},

							error: function (jqXHR, textStatus, errorThrown) { 
								work_in_progress = false;
								$('#file_show_edit_form').dialog('enable');
								$('#file_show_edit_form').dialog('close');
								var errmsg = '';
								if (errmsg == '' && errorThrown != null) errmsg = errorThrown;
								if (errmsg == '' && textStatus != null) errmsg = textStatus;
								if (errmsg == '') errmsg = 'Unknown error';
								show_alert ('Failed - ' + errmsg, "<?php print $this->lang->line('Error')?>");
							}
						});
					}
					else
					{
						show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
					}
				},
				'<?php print $this->lang->line('Cancel')?>': function () {
					if (work_in_progress) return;
					$('#file_show_edit_form').dialog('close');
				}
			},

			beforeClose: function() { 
				// if importing is in progress, prevent dialog closing
				return !work_in_progress;
			}
		}
	);


	$('#file_show_delete_form').dialog (
		{
			title: '<?php print $this->lang->line('Delete');?>',
			resizable: true,
			autoOpen: false,
			width: 'auto',
			height: 'auto',
			modal: true,
			buttons: {
				'<?php print $this->lang->line('OK')?>': function () {
					if (work_in_progress) return;

					if (!!window.FormData)
					{
						// FormData is supported
						work_in_progress = true;

						var form_data = new FormData();

						var f = $('#file_show_delete_confirm');
						if (f != null && f.is(':checked')) form_data.append ('file_delete_confirm', 'Y');

						$('#file_show_delete_form').dialog('disable');
						$.ajax({
							url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/file/xhr_delete/{$project->id}/{$hexname}"; ?>'),
							type: 'POST',
							data: form_data,
							mimeType: 'multipart/form-data',
							contentType: false,
							processData: false,
							cache: false,

							success: function (data, textStatus, jqXHR) { 
								work_in_progress = false;
								$('#file_show_delete_form').dialog('enable');
								$('#file_show_delete_form').dialog('close');
								if (data == 'ok') 
								{
									// refresh the page to the head revision
									$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/file/home/{$project->id}"; ?>'));
								}
								else
								{
									show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
								}
							},

							error: function (jqXHR, textStatus, errorThrown) { 
								work_in_progress = false;
								$('#file_show_delete_form').dialog('enable');
								$('#file_show_delete_form').dialog('close');
								show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
							}
						});
					}
					else
					{
						show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
					}
				},
				'<?php print $this->lang->line('Cancel')?>': function () {
					if (work_in_progress) return;
					$('#file_show_delete_form').dialog('close');
				}

			},

			beforeClose: function() { 
				// if importing is in progress, prevent dialog closing
				return !work_in_progress;
			}
		}
	);

	$('#file_show_add_files').change (function () {
		populate_selected_files_for_adding ();
	});

	$('#file_show_add_file_form').dialog (
		{
			title: '<?php print $this->lang->line('Add');?>',
			resizable: true,
			autoOpen: false,
			width: 'auto',
			height: 'auto',
			modal: true,
			buttons: {
				'<?php print $this->lang->line('OK')?>': function () {
					if (work_in_progress) return;

					if (!!window.FormData)
					{
						// FormData is supported
						work_in_progress = true;

						var form_data = new FormData();

						var f_no = 0;
						for (var i = 0; i <= populated_file_max_for_adding; i++)
						{
							var f = populated_file_obj_for_adding[i];
							if (f != null)
							{
								form_data.append ('file_add_file_' + f_no, f);

								var d = $('#file_show_add_file_desc_' + i);
								if (d != null) form_data.append('file_add_file_desc_' + f_no, d.val());
								f_no++;
							}
						}
						form_data.append ('file_add_file_count', f_no);

						$('#file_show_add_file_form').dialog('disable');
						$.ajax({
							url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/file/xhr_add_file/{$project->id}/{$hexname}"; ?>'),
							type: 'POST',
							data: form_data,
							mimeType: 'multipart/form-data',
							contentType: false,
							processData: false,
							cache: false,

							success: function (data, textStatus, jqXHR) { 
								work_in_progress = false;
								$('#file_show_add_file_form').dialog('enable');
								$('#file_show_add_file_form').dialog('close');
								if (data == 'ok') 
								{
									// refresh the page to the head revision
									$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/file/show/{$project->id}/{$hexname}"; ?>'));
								}
								else
								{
									show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
								}
							},

							error: function (jqXHR, textStatus, errorThrown) { 
								work_in_progress = false;
								$('#file_show_add_file_form').dialog('enable');
								$('#file_show_add_file_form').dialog('close');
								show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
							}
						});
					}
					else
					{
						show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
					}
				},
				'<?php print $this->lang->line('Cancel')?>': function () {
					if (work_in_progress) return;
					$('#file_show_add_file_form').dialog('close');
				}

			},

			beforeClose: function() { 
				// if importing is in progress, prevent dialog closing
				return !work_in_progress;
			}
		}
	);

	$('#file_show_edit_file_form').dialog (
		{
			title: '<?php print $this->lang->line('Edit');?>',
			resizable: true,
			autoOpen: false,
			width: 'auto',
			height: 'auto',
			modal: true,
			buttons: {
				'<?php print $this->lang->line('OK')?>': function () {
					if (work_in_progress) return;

					if (!!window.FormData)
					{
						// FormData is supported
						work_in_progress = true;

						var form_data = new FormData();

						var f_no = 0;
						for (var i = 0; i <= <?php print $file_count; ?>; i++)
						{
							var n = $('#file_show_edit_file_name_' + i);
							var d = $('#file_show_edit_file_desc_' + i);

							if (n && d)
							{
								if (d.prop('disabled'))
								{
									form_data.append ('file_edit_file_name_' + f_no, original_file_name[i]);
									form_data.append('file_edit_file_kill_' + f_no, 'yes');
									f_no++;
								}
								else if (d.val() != original_file_desc[i])
								{
									form_data.append ('file_edit_file_name_' + f_no, original_file_name[i]);
									form_data.append('file_edit_file_desc_' + f_no, d.val());
									f_no++;
								}
							}
						}
						form_data.append ('file_edit_file_count', f_no);

						$('#file_show_edit_file_form').dialog('disable');
						$.ajax({
							url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/file/xhr_edit_file/{$project->id}/{$hexname}"; ?>'),
							type: 'POST',
							data: form_data,
							mimeType: 'multipart/form-data',
							contentType: false,
							processData: false,
							cache: false,

							success: function (data, textStatus, jqXHR) { 
								work_in_progress = false;
								$('#file_show_edit_file_form').dialog('enable');
								$('#file_show_edit_file_form').dialog('close');
								if (data == 'ok') 
								{
									// refresh the page to the head revision
									$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/file/show/{$project->id}/{$hexname}"; ?>'));
								}
								else
								{
									show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
								}
							},

							error: function (jqXHR, textStatus, errorThrown) { 
								work_in_progress = false;
								$('#file_show_edit_file_form').dialog('enable');
								$('#file_show_edit_file_form').dialog('close');
								show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
							}
						});
					}
					else
					{
						show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
					}
				},
				'<?php print $this->lang->line('Cancel')?>': function () {
					if (work_in_progress) return;
					$('#file_show_edit_file_form').dialog('close');
				}

			},

			beforeClose: function() { 
				// if importing is in progress, prevent dialog closing
				return !work_in_progress;
			}
		}
	);

	$('#file_show_edit_button').button().click (
		function () { 
			$('#file_show_edit_form').dialog('open'); 
			return false; // prevent the default behavior
		}
	);
	$('#file_show_delete_button').button().click (
		function() {
			$('#file_show_delete_form').dialog('open');
			return false;
		}
	);

	$('#file_show_add_file_button').button().click (
		function() {
			$('#file_show_add_file_form').dialog('open');
			return false;
		}
	);

	$('#file_show_edit_file_button').button().click (
		function() {
			$('#file_show_edit_file_form').dialog('open');
			return false;
		}
	);

	var file_drag_event_handler = function(e) { return false; };
	var file_drop_event_handler = function(e)
	{
		var aff = $('#file_show_add_file_form');
		aff.dialog('close');
		populate_selected_files_for_adding_with(e.originalEvent.dataTransfer.files);
		aff.dialog('open');
		return false;
	};

	var tmp = $('#file_show_content');
	tmp.bind('dragstart', file_drag_event_handler);
	tmp.bind('dragenter', file_drag_event_handler);
	tmp.bind('dragleave', file_drag_event_handler);
	tmp.bind('dragover', file_drag_event_handler);
	tmp.bind('dragend', file_drop_event_handler);
	tmp.bind('drop', file_drop_event_handler);

	var tmp = $('#file_show_add_file_form').dialog();
	tmp.bind('dragstart', file_drag_event_handler);
	tmp.bind('dragenter', file_drag_event_handler);
	tmp.bind('dragleave', file_drag_event_handler);
	tmp.bind('dragover', file_drag_event_handler);
	tmp.bind('dragend', file_drop_event_handler);
	tmp.bind('drop', file_drop_event_handler);
<?php endif; ?>

	render_wiki ();
});

</script>

<title><?php print htmlspecialchars($project->name)?> - <?php print htmlspecialchars($file->name)?></title>
</head>

<body>

<div class="content" id="file_show_content">

<!---------------------------------------------------------------------------->

<?php $this->load->view ('taskbar'); ?>

<!---------------------------------------------------------------------------->

<?php
$this->load->view (
	'projectbar',
	array (
		'banner' => NULL,

		'page' => array (
			'type' => 'project',
			'id' => 'file',
			'project' => $project,
		),

		'ctxmenuitems' => array (
			// DEPRECATED
			//array ("file/update/{$project->id}/{$hexname}", '<i class="fa fa-edit"></i> ' . $this->lang->line('Edit'))
		)
	)
);
?>

<!---------------------------------------------------------------------------->


<div class="mainarea" id="file_show_mainarea">

<div class="codepot-title-band" id="file_show_title_band">
	<div class="title"><?php print htmlspecialchars($file->name)?></div>

	<div class="actions">
	<?php if (isset($login['id']) && $login['id'] != ''): ?>
		<a id="file_show_edit_button" href='#'><?php print $this->lang->line('Edit')?></a>
		<a id="file_show_delete_button" href='#'><?php print $this->lang->line('Delete')?></a>
	<?php endif; ?>
	</div>

	<div style='clear: both'></div>
</div>

<div id='file_show_metadata' class='collapsible-box'>
	<div id='file_show_metadata_header' class='collapsible-box-header'><?php print $this->lang->line('Metadata')?></div>
	<div id='file_show_metadata_body' class='codepot-metadata-collapsible-body'>
	<ul id='file_show_metadata_list'>
	<li><?php print $this->lang->line('Created on')?> <?php print codepot_dbdatetodispdate($file->createdon); ?></li>
	<li><?php print $this->lang->line('Created by')?> <?php print htmlspecialchars($file->createdby); ?></li>
	<li><?php print $this->lang->line('Last updated on')?> <?php print codepot_dbdatetodispdate($file->updatedon); ?></li>
	<li><?php print $this->lang->line('Last updated by')?> <?php print htmlspecialchars($file->updatedby); ?></li>
	</ul>
	</div>
</div>

<div id='file_show_files' class='collapsible-box'>
	<div id='file_show_files_header' class='collapsible-box-header'><?php print $this->lang->line('Files')?></div>

	<div id='file_show_files_body' class='codepot-metadata-collapsible-body'>
	<?php if (isset($login['id']) && $login['id'] != ''): ?>
	<div>
		<a id="file_show_add_file_button" href='#'><?php print $this->lang->line('Add')?></a>
		<a id="file_show_edit_file_button" href='#'><?php print $this->lang->line('Edit')?></a>
	</div>
	<?php endif; ?>

	<table id='file_show_files_table'>
	<?php
	for ($i = 0; $i < $file_count; $i++)
	{
		$f = $file->file_list[$i];
		$xname = $this->converter->AsciiToHex($f->filename);
		print '<tr><td class="file-name-td">';
		print anchor ("file/get/{$project->id}/{$xname}", '<i class="fa fa-download" /> ' . htmlspecialchars($f->filename));
		print '</td><td class="file-description-td">';
		print htmlspecialchars($f->description);
		print '</td><td class="file-md5sum-td">';
		print "<tt>{$f->md5sum}</tt>";
		print '</td><td class="file-createdon-td">';
		print codepot_dbdatetodispdate($f->createdon);
		print '</td><td class="file-createdby-td">';
		print htmlspecialchars($f->createdby);
		print '</td></tr>';
	}
	?>
	</table>
	</div>
</div>

<div id="file_show_result" class="codepot-relative-container-view">
	<div id="file_show_wiki" class="codepot-styled-text-view">
		<pre id="file_show_wiki_text" style="visibility: hidden"><?php print htmlspecialchars($file->description); ?></pre>
	</div>
</div>

<?php if (isset($login['id']) && $login['id'] != ''): ?>

<div id='file_show_edit_form'>
	<div style='line-height: 2em;'>
		<?php print $this->lang->line('Tag'); ?>: <input type='text' id='file_show_edit_tag' name='file_show_edit_tag' size='30' value='<?php print addslashes($file->tag); ?>'/>
		<?php print $this->lang->line('Name'); ?>: <input type='text' id='file_show_edit_name' name='file_show_edit_name' size='60' value='<?php print addslashes($file->name); ?>'/>
	</div>

	<div id='file_show_edit_description_tabs' style='width:100%;'>
		<ul>
			<li><a href='#file_show_edit_description_input'><?php print $this->lang->line('Description'); ?></a></li>
			<li><a href='#file_show_edit_description_preview'><?php print $this->lang->line('Preview'); ?></a></li>
		</ul>

		<div id='file_show_edit_description_input'>
			<textarea type='textarea' id='file_show_edit_description' name='file_show_edit_description' rows=24 cols=100 style='width:100%;'><?php print htmlspecialchars($file->description); ?></textarea>
		</div>
		<div id='file_show_edit_description_preview' class='codepot-styled-text-preview'>
		</div>
	</div>
</div>

<div id='file_show_delete_form'>
	<input type='checkbox' id='file_show_delete_confirm' />
	<?php print $this->lang->line('MSG_SURE_TO_DELETE_THIS') . ' - ' . htmlspecialchars($file->name); ?>
</div>

<div id='file_show_add_file_form'>
	<div id='file_show_add_file_input'>
		<input type='file' id='file_show_add_files' name='file_show_add_files' multiple='' autocomplete='off' style='color: transparent;' />
		<table id='file_show_add_file_table'></table>
	</div>
</div>

<div id='file_show_edit_file_form'>
	<table>
	<?php
	for ($i = 0; $i < $file_count; $i++)
	{
		$f = $file->file_list[$i];
		print '<tr><td>';
		printf ('<a href="#" onClick="kill_edit_file(%d); return false;"><i class="fa fa-trash"></i></a>', $i);
		print '</td><td>';
		printf ('<span id="file_show_edit_file_name_%d">%s</span>', $i, htmlspecialchars($f->filename));
		print '</td><td>';
		printf ('<input type="text" id="file_show_edit_file_desc_%d" value="%s" size="40" autocomplete="off" />', $i, addslashes($f->description));
		print '</td></tr>';
	}
	?>
	</table>
</div>

<?php endif; ?>

<div id='file_show_alert'></div>

</div> <!-- file_show_mainarea -->

<div class='codepot-footer-pusher'></div> <!-- for sticky footer -->

</div> <!--  file_show_content -->

<!---------------------------------------------------------------------------->

<?php $this->load->view ('footer'); ?>

<!---------------------------------------------------------------------------->


</body>

</html>

LOC