', {
class: 'bibtex_status'
}).appendTo(container);
bibtexEditor.on('change', function (bibtexEditor) {
updateEntryBasedOnBibtex(id, bibtexEditor);
});
}
if (bib.warnings[id] && bib.warnings[id].length > 0) {
bibtexWarningsDiv.toggle()
}
});
citationControl.click(function () {
if ($(bib.entryDivs[id]).find('.citation').length) {
closeCitation(id);
} else {
if (bibtexEditor) {
closeBibtex(id, container);
}
var citation = bib.createCitation(id);
var citationDiv = $('
' + citation + '
').appendTo(bib.entryDivs[id]);
selectElementText(citationDiv.get(0));
}
});
}
function closeBibtex(id, container) {
container.find('.CodeMirror').toggle();
bib.entryDivs[id] = null;
page.update();
}
function closeCitation(id) {
$(bib.entryDivs[id]).find('.citation').remove();
}
function shortenText(s, length) {
if (s.length > length * 1.5 && length > 3) {
return s.substring(0, length - 3) + '...';
}
return s;
}
function addField(bibtexText, inputText) {
var fieldType = '';
inputText = inputText.trim();
var inputTextLower = inputText.toLowerCase();
if (inputTextLower.indexOf('10.') === 0) {
fieldType = 'doi';
} else if (inputTextLower.length > 200) {
fieldType = 'abstract';
} else if (inputTextLower.indexOf('http') === 0) {
fieldType = 'url';
} else if (inputTextLower.match(/\d\d\d\d-\d\d-\d\d/)) {
fieldType = 'date';
} else if (inputTextLower.match(/\d+ ?--? ?\d+/)) {
fieldType = 'pages';
} else if (inputTextLower.indexOf('proceedings of') >= 0 || inputTextLower.indexOf('international') >= 0) {
fieldType = 'booktitle';
} else {
Object.keys(bib.entries).some(id => {
if (bib.entries[id].series === inputText) {
fieldType = 'series';
return true;
} else if (bib.entries[id].publisher === inputText) {
fieldType = 'publisher';
return true;
}
return false;
})
if (!fieldType && inputText.toUpperCase() === inputText) {
fieldType = 'series';
}
}
if (fieldType) {
page.notify(`Automatically detected field type: "${fieldType}".`);
} else {
page.notify('Could not automatically detect field type. Added value with field type "unknown", please change manually.', 'error');
fieldType = 'unknown';
}
var newFieldText = ',\n ' + fieldType + ' = {' + inputText + '}';
var posClosingBracket = bibtexText.lastIndexOf('}');
if (bibtexText[posClosingBracket - 1] === '\n') {
posClosingBracket--;
}
return [bibtexText.slice(0, posClosingBracket),
newFieldText, bibtexText.slice(posClosingBracket)].join('');
}
function updateEntryBasedOnBibtex(id, bibtexEditor) {
const bibtexStatusDiv = bib.entryDivs[id].find('.bibtex_status');
bibtexStatusDiv.empty();
try {
var bibtexText = bibtexEditor.getValue();
var bibtexEntries = bib.parse(bibtexText);
$.each(bibtexEntries, function (parsedID) {
var bibtexEntry = bibtexEntries[parsedID];
if (id != parsedID) {
$('
', {
text: 'Changed ID of entry will only be applied after save and refresh.',
class: 'info'
}).appendTo(bibtexStatusDiv);
}
bib.entries[id] = {};
for (var key in bibtexEntry) {
var keyLower = key.toLowerCase();
bib.entries[id][keyLower] = bibtexEntry[key];
}
});
}
catch (err) {
$('
', {
text: err,
class: 'error'
}).appendTo(bibtexStatusDiv);
}
bib.entryDivs[id].find('.entry_main').replaceWith(createEntryMainDiv(id));
bib.warnings[id] = warnings.computeWarnings(bib.entries[id]);
}
// http://stackoverflow.com/questions/985272/jquery-selecting-text-in-an-element-akin-to-highlighting-with-your-mouse
function selectElementText(el, win) {
win = win || window;
var doc = win.document, sel, range;
if (win.getSelection && doc.createRange) {
sel = win.getSelection();
range = doc.createRange();
range.selectNodeContents(el);
sel.removeAllRanges();
sel.addRange(range);
} else if (doc.body.createTextRange) {
range = doc.body.createTextRange();
range.moveToElementText(el);
range.select();
}
}
})();