office_online_viewer

View office documents in your browser with Microsoft Office Online

// ==UserScript==
// @name		office_online_viewer
// @description		View office documents in your browser with Microsoft Office Online
// @namespace		liudonghua123
// @version        	0.0.1
// @include        	*
// @exclude        	http*://view.officeapps.live.com/*
// @exclude        	http*://docs.google.com/*
// @exclude        	http*://mail.google.com/*
// @exclude        	http*://viewer.zoho.com/*
// @exclude        	http*://office.live.com/*
// ==/UserScript==

(function process() {
    const pageLinks = [...document.links];
    const officeWordExtension = ["doc", "docx"],
        officeExcelExtension = ["xls", "xlsx"],
        officePowerpointExtension = ["ppt", "pps", "pptx"];
    const officeExtension = [...officeWordExtension, ...officeExcelExtension, ...officePowerpointExtension];
    const viewOfficeUrl = "https://view.officeapps.live.com/op/view.aspx";
    const isOfficeLink = (link) => {
        const { pathname: path, text } = link;
        const pathExtension = path.lastIndexOf('.') > 0 ? path.substr(path.lastIndexOf('.') + 1).toLowerCase() : '';
        const textExtension = text.lastIndexOf('.') > 0 ? text.substr(text.lastIndexOf('.') + 1).toLowerCase() : '';
        return officeExtension.includes(pathExtension) || officeExtension.includes(textExtension);
    };
    const linkIcon = (link) => {
        const { pathname: path, text } = link;
        const pathExtension = path.lastIndexOf('.') > 0 ? path.substr(path.lastIndexOf('.') + 1).toLowerCase() : '';
        const textExtension = text.lastIndexOf('.') > 0 ? text.substr(text.lastIndexOf('.') + 1).toLowerCase() : '';
        if (officeWordExtension.includes(pathExtension) || officeWordExtension.includes(textExtension)) return "https://docs.microsoft.com/zh-cn/javascript/api/overview/images/logo-word.svg";
        else if (officeExcelExtension.includes(pathExtension) || officeExcelExtension.includes(textExtension)) return "https://docs.microsoft.com/zh-cn/javascript/api/overview/images/logo-excel.svg";
        else if (officePowerpointExtension.includes(pathExtension) || officePowerpointExtension.includes(textExtension)) return "https://docs.microsoft.com/zh-cn/javascript/api/overview/images/logo-powerpoint.svg";
        else return '';
    };
    const addOfficeBadge = (link) => {
        const officeLink = document.createElement('a');
        officeLink.href = `${viewOfficeUrl}?src=${encodeURIComponent(link.href)}`;
        officeLink.isParsed = true;
        officeLink.target = "_blank";
        const ico = document.createElement("img");
        ico.src = linkIcon(link);
        ico.style.marginLeft = "5px";
        ico.style.height = "25px";
        officeLink.appendChild(ico);
        link.parentNode.insertBefore(officeLink, link.nextSibling);
    }
    const officeLinks = pageLinks.filter(isOfficeLink);
    for (const link of officeLinks) {
        console.info(`process ${link.href}`);
        addOfficeBadge(link);
    }
})();