Luc Didry d94c2b
// vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
Luc Didry 691516
// Add item to localStorage
Luc Didry 691516
function addItem(item) {
Luc Didry 691516
    var files = localStorage.getItem('files');
Luc Didry 691516
    if (files === null) {
Luc Didry 691516
        files = new Array();
Luc Didry 691516
    } else {
Luc Didry 691516
        files = JSON.parse(files);
Luc Didry 691516
    }
Luc Didry 691516
    files.push(item);
Luc Didry 691516
    localStorage.setItem('files', JSON.stringify(files));
Luc Didry 691516
}
Luc Didry 691516
Luc Didry 60e157
function delItem(name) {
Luc Didry 60e157
    var files = localStorage.getItem('files');
Luc Didry 60e157
    if (files === null) {
Luc Didry 60e157
        files = new Array();
Luc Didry 60e157
    } else {
Luc Didry 60e157
        files = JSON.parse(files);
Luc Didry 60e157
    }
Luc Didry 60e157
    var i;
Luc Didry 60e157
    for (i = 0; i < files.length; i++) {
Luc Didry 60e157
        if (files[i].short === name) {
Luc Didry 60e157
            files.splice(i, 1);
Luc Didry 60e157
        }
Luc Didry 60e157
    }
Luc Didry 60e157
    localStorage.setItem('files', JSON.stringify(files));
Luc Didry 60e157
}
Luc Didry 60e157
Luc Didry 691516
function itemExists(name) {
Luc Didry 691516
    var files = localStorage.getItem('files');
Luc Didry 691516
    if (files === null) {
Luc Didry 691516
        return false;
Luc Didry 691516
    } else {
Luc Didry 691516
        files = JSON.parse(files);
Luc Didry 691516
        var i;
Luc Didry 691516
        for (i = 0; i < files.length; i++) {
Luc Didry 691516
            if (files[i].short === name) {
Luc Didry 691516
                return true;
Luc Didry 691516
            }
Luc Didry 691516
        }
Luc Didry 691516
        return false;
Luc Didry 691516
    }
Luc Didry 691516
}
Luc Didry 691516
Luc Didry 60e157
function purgeExpired() {
Luc Didry 60e157
    var files = JSON.parse(localStorage.getItem('files'));
Luc Didry 60e157
Luc Didry 60e157
    files.forEach(function(element, index, array) {
Luc Didry d3222b
        $.ajax({
Luc Didry d3222b
            url: counterURL,
Luc Didry d3222b
            method: 'POST',
Luc Didry d3222b
            dataType: 'json',
Luc Didry d3222b
            data: {
Luc Didry d3222b
                short: element.short,
Luc Didry d3222b
                token: element.token
Luc Didry d3222b
            },
Luc Didry d3222b
            success: function(data, textStatus, jqXHR) {
Luc Didry 60e157
                if (data.success) {
Luc Didry 60e157
                    if (data.deleted) {
Luc Didry d3222b
                        $('#count-'+data.short).parent().remove();
Luc Didry 60e157
                        delItem(data.short);
Luc Didry 60e157
                    }
Luc Didry 60e157
                }
Luc Didry 60e157
            }
Luc Didry d3222b
        });
Luc Didry 60e157
    });
Luc Didry 60e157
}
Luc Didry 60e157
Luc Didry 691516
function exportStorage() {
Luc Didry d3222b
    var a   = $('');
Luc Didry d3222b
    a.hide();
Luc Didry d3222b
    $('body').append(a);
Luc Didry 691516
Luc Didry 691516
    var storageData = [localStorage.getItem('files')];
Luc Didry d9412f
    var exportFile  = new Blob(storageData, {type : 'application/json'});
Luc Didry 691516
    var url         = window.URL.createObjectURL(exportFile);
Luc Didry 691516
Luc Didry d3222b
    a.attr('href', url);
Luc Didry d3222b
    a.attr('download', 'data.json');
Luc Didry d3222b
    $('#data-json')[0].click();
Luc Didry d3222b
    $('#data-json').remove();
Luc Didry 691516
}
Luc Didry 691516
Luc Didry 691516
function importStorage(f) {
Luc Didry 691516
    var reader = new FileReader();
Luc Didry 691516
    reader.addEventListener("loadend", function() {
Luc Didry 691516
        try {
Luc Didry 691516
            var newFiles = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(reader.result)));
Luc Didry 691516
            var i;
Luc Didry 691516
            var hasImported = 0;
Luc Didry 691516
            for (i = 0; i < newFiles.length; i++) {
Luc Didry 691516
                var item = newFiles[i];
Luc Didry 691516
                if (!itemExists(item.short)) {
Luc Didry 691516
                    addItem(item);
Luc Didry 691516
                    hasImported++;
Luc Didry 691516
                }
Luc Didry 691516
            }
Luc Didry 691516
            populateFilesTable();
Luc Didry 691516
Luc Didry d3222b
            Materialize.toast(i18n.importProcessed);
Luc Didry 691516
        } catch(err) {
Luc Didry 691516
            alert(err);
Luc Didry 691516
        }
Luc Didry 691516
    });
Luc Didry 691516
    reader.readAsArrayBuffer(f[0]);
Luc Didry 691516
}
Luc Didry 691516
Luc Didry 55b0a3
function delFile() {
Luc Didry 55b0a3
    var dlink = $(this).attr('data-dlink');
Luc Didry 55b0a3
    var short = $(this).attr('data-short');
Luc Didry 55b0a3
    $.ajax({
Luc Didry 55b0a3
        url: dlink,
Luc Didry 55b0a3
        method: 'GET',
Luc Didry 55b0a3
        data: {
Luc Didry 55b0a3
            format: 'json'
Luc Didry 55b0a3
        },
Luc Didry 55b0a3
        success: function(data) {
Luc Didry 55b0a3
            if (data.success) {
Luc Didry 55b0a3
                $('#row-'+short).remove();
Luc Didry 55b0a3
                delItem(short);
Luc Didry 55b0a3
            } else {
Luc Didry 55b0a3
                alert(data.msg);
Luc Didry 55b0a3
            }
Luc Didry 55b0a3
        },
Luc Didry 55b0a3
        error: function() {
Luc Didry 55b0a3
        },
Luc Didry 55b0a3
        complete: function() {
Luc Didry 55b0a3
        }
Luc Didry 55b0a3
    });
Luc Didry 55b0a3
}
Luc Didry 55b0a3
Luc Didry 81d73c
function evaluateMassDelete() {
Luc Didry 81d73c
    if ($('input[data-checked="data-checked"]').length > 0) {
Luc Didry 81d73c
        $('#mass-delete').removeAttr('disabled');
Luc Didry 81d73c
        $('#mass-delete').removeClass('disabled');
Luc Didry 81d73c
    } else {
Luc Didry 81d73c
        $('#mass-delete').attr('disabled');
Luc Didry 81d73c
        $('#mass-delete').addClass('disabled');
Luc Didry 81d73c
    }
Luc Didry 81d73c
}
Luc Didry 81d73c
Luc Didry 81d73c
function massDelete() {
Luc Didry 81d73c
    $('input[data-checked="data-checked"]').each(delFile);
Luc Didry 81d73c
}
Luc Didry 81d73c
Luc Didry 60e157
function populateFilesTable() {
Luc Didry d3222b
    $('#myfiles').empty();
Luc Didry 691516
Luc Didry 60e157
    var files = JSON.parse(localStorage.getItem('files'));
Luc Didry 691516
    files.sort(function(a, b) {
Luc Didry 691516
        if (a.created_at < b.created_at) {
Luc Didry 691516
            return -1;
Luc Didry 691516
        } else if (a.created_at > b.created_at) {
Luc Didry 691516
            return 1;
Luc Didry 691516
        } else {
Luc Didry 691516
            return 0
Luc Didry 691516
        }
Luc Didry 691516
    });
Luc Didry 60e157
    files.forEach(function(element, index, array) {
Luc Didry d3222b
        var del_view   = (element.del_at_first_view) ? '' : '';
Luc Didry 60e157
        var dlink      = baseURL+'d/'+element.short+'/'+element.token;
Luc Didry 60e157
        var limit      = (element.delay === 0) ? i18n.noExpiration : moment.unix(element.delay * 86400 + element.created_at).locale(window.navigator.language).format('LLLL');
Luc Didry 60e157
        var created_at = moment.unix(element.created_at).locale(window.navigator.language).format('LLLL');
Luc Didry 60e157
Luc Didry 55b0a3
        var tr = $('');
Luc Didry 81d73c
        tr.html([ '',
Luc Didry 81d73c
                      '<input type="checkbox" id="check-', element.short,'" data-short="', element.short, '" data-dlink="', dlink, '" data-checked="">',
Luc Didry 81d73c
                      '<label for="check-', element.short,'"></label>',
Luc Didry 81d73c
                  '',
Luc Didry 81d73c
                  '',
Luc Didry d94c2b
                      escapeHtml(element.name),
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                      '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                      del_view,
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                      created_at,
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry d3222b
                      limit,
Luc Didry d3222b
                  '',
Luc Didry d3222b
                  '',
Luc Didry 55b0a3
                      '',
Ilker Kulgu 50982d
                  '',
Ilker Kulgu 50982d
                  '',
Ilker Kulgu 50982d
                      '',
Luc Didry d3222b
                  ''].join(''));
Luc Didry d3222b
        $('#myfiles').append(tr);
Luc Didry 55b0a3
        $('#del-'+element.short).on('click', delFile);
Luc Didry 81d73c
        $('label[for="check-'+element.short+'"').on('click', function(){
Luc Didry 81d73c
            if ($('#check-'+element.short).attr('data-checked') && $('#check-'+element.short).attr('data-checked') === 'data-checked') {
Luc Didry 81d73c
                $('#check-'+element.short).attr('data-checked', null);
Luc Didry 81d73c
            } else {
Luc Didry 81d73c
                $('#check-'+element.short).attr('data-checked', 'data-checked');
Luc Didry 81d73c
            }
Luc Didry 81d73c
            evaluateMassDelete();
Luc Didry 81d73c
        });
Luc Didry 60e157
Luc Didry d3222b
        $.ajax({
Luc Didry d3222b
            url: counterURL,
Luc Didry d3222b
            method: 'POST',
Luc Didry d3222b
            dataType: 'json',
Luc Didry d3222b
            data: {
Luc Didry d3222b
                short: element.short,
Luc Didry d3222b
                token: element.token
Luc Didry d3222b
            },
Luc Didry d3222b
            success: function(data, textStatus, jqXHR) {
Luc Didry 60e157
                if (data.success) {
Luc Didry d3222b
                    $('#count-'+data.short).html(data.counter);
Luc Didry 990729
                    if (data.deleted) {
Luc Didry d3222b
                        $('#count-'+data.short).parent().addClass('purple lighten-4');
Luc Didry 990729
                    }
Luc Didry 60e157
                } else {
Luc Didry 60e157
                    alert(data.msg);
Luc Didry d3222b
                    $('#count-'+data.short).parent().remove();
Luc Didry 60e157
                    if (data.missing) {
Luc Didry 60e157
                        delItem(data.short);
Luc Didry 60e157
                    }
Luc Didry 60e157
                }
Luc Didry 60e157
            }
Luc Didry d3222b
        });
Luc Didry 60e157
    });
Luc Didry 60e157
}