var select = document.getElementById("year");
var options = ["2018", "2019"];
for (var i = 0; i < options.length; i++) {
var opt = options[i];
var el = document.createElement("option");
el.textContent = opt;
el.value = opt;
select.appendChild(el);
}
// get the table.
var table = document.getElementById("table");
// Read data for sorting and filtering
// ---------------------------------------
// iterate through the rows of the table.
var rows = table.getElementsByTagName("tr");
for (var i = 0; i < rows.length; i++) {
var tr = rows[i];
// temp vars for filtering/sorting table.
var year = NaN;
var month = NaN;
var day = NaN;
var hour = NaN;
// iterate through columns for data/time data.
var cols = tr.getElementsByTagName("td");
for (var j = 0; j < cols.length; j++) {
// get the contents of the cell.
var td = cols[j];
var contents = td.innerText;
// check if contents contains date.
var dateResult = contents.match(/([0-9]{2})[\/]{1}([0-9]{2})[\/]{1}([0-9]{4})/m);
// if match, collect year, month, day values.
if (dateResult != null && 0 < dateResult.length) {
year = parseInt(dateResult[3]);
month = parseInt(dateResult[2]);
day = parseInt(dateResult[1]);
} else { // only check the time if content is not a "date".
// check if contents contains time.
var timeResult = contents.match(/([0-9]{2}):[0-9]{2}h/m);
// if match, collect hour value.
if( timeResult != null && 0 < timeResult.length) {
hour = parseInt(timeResult[1]);
}
}
// break the loop if necessary data has been collected.
if (!isNaN(year) && !isNaN(month) && !isNaN(day) && !isNaN(hour)) {
break;
}
}
// create a value for sorting.
var sort = year * 1000000 + month * 10000 + day * 100 + hour;
// set sorting and filtering (year) data on row.
tr.setAttribute('data-sort', sort);
tr.setAttribute('data-year', year);
}
// Sort the rows by Year/Month/Date/Hour
// ---------------------------------------
// convert rows (NodeList) to Array.
var rowsArray = Array.prototype.slice.call(rows);
// sort the rows array by "sort" value on elments.
rowsArray.sort(function(a, b) {
return a.dataset.sort - b.dataset.sort;
});
// get the table body.
var tbody = table.getElementsByTagName("tbody")[0];
// reorder rows in table.
for (var i = 0; i < rowsArray.length; i++) {
var row = rowsArray[i];
tbody.removeChild(row);
tbody.appendChild(row);
}
// Add filter event listener to select
// ---------------------------------------
var filterRows = function() {
// get the selected year.
var year = parseInt(this.options[this.selectedIndex].value);
// iterate table rows. show/hide as needed.
for (var i = 0; i < rows.length; i++) {
var tr = rows[i];
if( 0 < year && tr.dataset.year != year ) {
tr.style.display = "none";
} else {
tr.style.display = "table-row";
}
}
};
// apply year filter on select change event.
select.addEventListener("change", filterRows);
// optionally call filterRows(); to initialize table sorting.
// filterRows();
<select id="year">
<!-- added blank option to allow for first year to be selected on load -->
<option>----</option>
</select>
<table id="table">
<tbody>
<tr>
<td>06/05/2018</td>
<td>16:00h</td>
<td>Chris</td>
</tr>
<tr>
<td>24/10/2019</td>
<td>20:00h</td>
<td>Alex</td>
</tr>
<tr>
<td>11/03/2018</td>
<td>15:00h</td>
<td>Dani</td>
</tr>
<tr>
<td>08/04/2019</td>
<td>12:30h</td>
<td>Joe</td>
</tr>
<tr>
<td>22/04/2018</td>
<td>10:30h</td>
<td>Mike</td>
</tr>
</tbody>
</table>
Я имел тот же probleam и наконец нашел решение, работающее на меня. Необходимо предоставить 2 различным поставщикам документа - сначала расширяющийся FileDocumentProvider для файлов в инструментальных средствах и второй расширяющийся TextFileDocumentProvider для других ресурсов вне рабочей области. Затем Вы регистрируете правильного поставщика соответственно к входу в Ваших редакторах doSetInput метод как это:
private IDocumentProvider createDocumentProvider(IEditorInput input) {
if(input instanceof IFileEditorInput){
return new XMLTextDocumentProvider();
} else if(input instanceof IStorageEditorInput){
return new XMLFileDocumentProvider();
} else {
return new XMLTextDocumentProvider();
}
}
@Override
protected final void doSetInput(IEditorInput input) throws CoreException {
setDocumentProvider(createDocumentProvider(input));
super.doSetInput(input);
}
затем в Вашем новом поставщике документа (расширяющий TextFileDocumentProvider) вставляют что-то как это:
protected FileInfo createFileInfo(Object element) throws CoreException {
FileInfo info = super.createFileInfo(element);
if(info==null){
info = createEmptyFileInfo();
}
IDocument document = info.fTextFileBuffer.getDocument();
if (document != null) {
/* register your partitioner and other things here
same way as in your fisrt document provider */
}
return info;
}
Это работает на меня :) Наконец я должен упомянуть, что я не так умен и что я скопировал это решение с Amateras проекта (Плагин редактора HTML с открытым исходным кодом для затмения)
Я немного вдали от исходного кода в данный момент, хотя я подозреваю, что проблемой является a ClassCastException
:
IEditorInput
org.eclipse.ui.IFileEditorInput
.IEditorInput
org.eclipse.ui.IStorageEditorInput
Различие находится в том, как Вы получаете содержание от IEditorInput
. JDT делает явное instanceof
проверьте для переключений.
Я не думаю что getAdapter(Class clazz)
возвратит a java.io.InputStream
если Вы предлагаете его.
Я не вполне понимаю, почему они делают это как это, но это чувствует себя ужасным.
Править: Более общая точка об отладке затмевает приложения - действительно очень полезно попытаться собрать все Ваши журналы в одно место (т.е. консоль).
Чтобы сделать это, удостоверьтесь, что Вы используете параметры командной строки -console
и -consoleLog
. Последний помог сохранить бесчисленные часы времени. Если Вы уже не имеете, изучаете самые основные вещи о том, как использовать консоль (ss
и start
мой чаще всего используется). Это сэкономит еще некоторое время, диагностируя определенный класс проблемы.
Вы пытались создать файл JAVA с помощью редактора вне рабочей области?
При вызове редактора с путем к файлу, concat "file://" в начале файла path.e.g: если путь является C://временный файл//Sample.java, то измените его как file://C://temp//Sample.java.