Szerkesztő:Tgr/InstaCite.js
Megjelenés
Megjegyzés: közzététel után frissítened kell a böngésződ gyorsítótárát, hogy lásd a változásokat.
- Firefox / Safari: tartsd lenyomva a Shift gombot és kattints a Frissítés gombra a címsorban, vagy használd a Ctrl–F5 vagy Ctrl–R (Macen ⌘–R) billentyűkombinációt
- Google Chrome: használd a Ctrl–Shift–R (Macen ⌘–Shift–R) billentyűkombinációt
- Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
// TODO check CORS support, JSON.stringify support
var InstaCite = (function() {
var serviceUrl = 'http://tron.wmm.hu:12345/web';
var typeToTemplate = {
journalArticle: 'cite journal',
};
function resolve(url) {
var sessionid = Math.random();
return $.ajax({
url: serviceUrl,
type: "POST",
data: JSON.stringify({
url: url,
sessionid: sessionid
}),
contentType: "application/json; charset=utf-8",
dataType: "json"
});
}
function tpl(name, params) {
var code = '{{' + name;
for (name in params) {
if (params[name] == null || typeof params[name] == 'undefined') continue;
code += '|' + name + '=' + params[name];
}
return code + '}}';
}
function deepGet(data, key) {
var part, parts = key.split('.');
for (var i = 0; i < parts.length; i++) {
part = parts[i];
if (typeof data == 'object' && typeof data[part] != 'undefined') {
data = data[part];
} else {
return undefined;
}
}
return data;
}
function map(data, plan) {
var value, mapped = {};
for (name in plan) {
value = deepGet(data, name);
if (value == null || typeof value == 'undefined') continue;
mapped[plan[name]] = value;
}
return mapped;
}
function createTemplate(data) {
var templateName = typeToTemplate[data.itemType] || 'cite web';
return tpl(templateName, map(data, {
'title': 'title',
'date' : 'date',
'url' : 'url',
'creators.0.name' : 'name',
'creators.0.firstName' : 'firstName',
'creators.0.lastName' : 'lastName'
}));
}
function resolveToTemplate(url) {
return resolve(url).pipe(function(data) {
if (data.length === 0) {
return '';
}
if (data.length) {
data = data[0];
}
return createTemplate(data);
});
}
function showLoading(show) {
var loading = $('#loading');
if (!loading.length) {
loading = $('<div>', {
text: 'Loading!',
id : 'loading'
}).css({
position: 'absolute',
height: '30px',
width: '60px',
top: '100px',
left: '50px',
backgroundColor: '#eee',
border: '1px solid #bbb',
color: 'red'
});
}
loading.toggle(show);
}
function popup() {
var url = dialog('URL to resolve:');
if (!url) return;
showLoading(true);
resolve(url).pipe(createTemplate).always(function() {
showLoading(false);
}).then(function(tpl) {
// insert tpl
}, function(error) {
// insert error msg
});
}
return {
resolve: resolve,
resolveToTemplate: resolveToTemplate,
popup: popup
};
})();