Szerkesztő:Tgr/InstaCite.js

A Wikipédiából, a szabad enciklopédiából

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
  • Internet Explorer / Edge: tartsd nyomva a Ctrl-t, és kattints a Frissítés gombra, vagy nyomj Ctrl–F5-öt
  • Opera: 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
    };
})();