{"id":17991256,"url":"https://github.com/oleksiyrudenko/gd-linkman","last_synced_at":"2025-08-31T16:43:56.960Z","repository":{"id":85274092,"uuid":"95689919","full_name":"OleksiyRudenko/gd-linkman","owner":"OleksiyRudenko","description":"Fully client side link manager for Google Drive","archived":false,"fork":false,"pushed_at":"2017-10-04T14:42:43.000Z","size":3491,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-04T04:15:35.320Z","etag":null,"topics":["client-side","google-drive","linkshare","webapp"],"latest_commit_sha":null,"homepage":"https://oleksiyrudenko.github.io/gd-linkman/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OleksiyRudenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-28T16:29:52.000Z","updated_at":"2024-01-13T23:56:55.000Z","dependencies_parsed_at":"2023-05-15T04:45:22.070Z","dependency_job_id":null,"html_url":"https://github.com/OleksiyRudenko/gd-linkman","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/OleksiyRudenko/gd-linkman","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OleksiyRudenko%2Fgd-linkman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OleksiyRudenko%2Fgd-linkman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OleksiyRudenko%2Fgd-linkman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OleksiyRudenko%2Fgd-linkman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OleksiyRudenko","download_url":"https://codeload.github.com/OleksiyRudenko/gd-linkman/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OleksiyRudenko%2Fgd-linkman/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273010949,"owners_count":25030368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client-side","google-drive","linkshare","webapp"],"created_at":"2024-10-29T19:20:49.820Z","updated_at":"2025-08-31T16:43:56.938Z","avatar_url":"https://github.com/OleksiyRudenko.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NOT OF PRODUCTION QUALITY!\n\n# Google Drive File Link Management\n\nA Google Drive application to manage file download and export links.\nExport options are supported for Google office suite documents.\n\n\u003e Note: native Google office suite documents hereinafter referred \nto as the **NGD**.\n\n[Try it live](https://oleksiyrudenko.github.io/gd-linkman/)\n\n## The Problem\n\nWhen you share a link to a file located on Google Drive your vis-a-vis \nmay face:\n * need to switch to a Google account in order to access NGD\n * inability to access NGD when vis-a-vis has got no Google account\n * take extra step to download other types of files as by default those\n   are opened in a preview mode\n * inability to access any file if access permissions aren't\n   set properly\n\nYou may also want to track access activities.\n\n## Contents\n * [Solution](#solution)\n * [Features explained](#features)\n * [Installation](#installation)\n * [Credits](#credits)\n * [Copyright](#copyright)\n * [Resources](#resources)\n\n## Solution\n\nThis tool integrates with Google Drive and offers:\n * convert-and-download direct links for native Google documents\n * direct download links for other types of files\n\nThe tool doesn't fetch files contents.\n\n### Features\n * Convert and download link for NGD\n * NGD gets converted to MSO document, pdf, or other types\n * Google Sheets pdf export can be tuned\n * Direct download link for other types\n * goo.gl url shortener embedded\n * access authorization shortcut\n \n### NGD export support\n\n| NGD file type       | MSO         | OpenDoc | html  | rtf / epub | pdf   | txt | csv / tsv | jpg / png / svg |\n|---------------------|:-----------:|:-------:|:-----:|:----------:|:-----:|:---:|:---------:|:---------------:|\n| Docs                | docx        | odt     | `(1)` | +          | +     | +   | -         | -               |\n| Sheets              | xlsx        | ods     | `(1)` | -          | `(2)` | -   | `(3)`     | -               |\n| Slides              | ppsx / pptx | odp     | -     | -          | +     | +   | -         | `(4)`           |\n| Drawings            | -           | -       | -     | -          | +     | -   | -         | +               |\n| Forms `(5)`         | -           | -       | -     | -          | -     | -   | -         | -               |\n| Fusion Tables `(6)` | -           | -       | -     | -          | -     | -   | -         | -               |\n \nNotes:\n * `(1)` - zipped web-page with media assets if any \n * `(2)` - customized pdf output available\n * `(3)` - available on per sheet basis and therefore\n   from Sheets open context; \n   see [Google Sheets](#google-sheets) \n   section below for details\n * `(4)` - available on per slide basis and therefore\n    from Slides open context; \n    see [Google Slides](#google-slides) \n    section below for details\n * `(5)` - Google Forms download or export \n   makes no sense, therefore only open link shortening offered\n * `(6)` - Google Fusion Tables is an experimental\n   application and not supported yet\n \n[Native Google documents conversion MIME-types](https://developers.google.com/drive/v3/web/integrate-open) \n \n### Security\n\nThis app is based on the drive.file OAuth2 scope, \nwhere permission is granted only for individual files \nthat the user authorizes.\n\n[[back to contents]](#contents)\n\n## Features explained\n\n### Links\n\n#### Long URLs\n \n * `open` - equivalent to shareable link available from\n   Google Drive context menu. NGD are get opened with\n   native google applications. Other files are get opened with\n   Drive preview or associated application if any.\n * `download` - direct file download link. NGD can\n   be exported in either of\n   [supported formats](#ngd-export-support), so user is presented\n   with a list of links.\n\n#### goo.gl shortened links\n\nWhen Google authorized user requests a short url via\ngoogle URL shortener a new goo.gl id\nis being generated every time, which makes stats collection\nnear senseless. This app generates goo.gl id for each type\nof targeted long URL only once and stores those in file\ndescription as a JSON document.\n\n**NB!** The JSON preceded with `LINKMAN=` string is appended to the\nend of file description. However user can accidentally remove \nor corrupt the JSON, in which case new goo.gl ids will be generated.\n\nFile description gets updated only upon Save action \nor upon first access to a file.\n\nTypes of short URLs stored:\n * `open` : preview|NGD open\n * `DL`   : download for non-NGD files\n\nFor NGD documents exporting urls are stored.\nMSO and pdf export urls are generated by default. Other types\nrequire manual activation.\n\n#### NGD specifics\n\n##### Google Sheets\n\nGoogle Sheets pdf export can be customized.\n\nAvailable settings are:\n * `size = letter|A4|A3...`\n * `portrait = true|false`\n * `fitw = true|false`\n * `source = custom string`\n * `sheetnames = true|false`\n * `printtitle = true|false` // optional headers and footers\n * `pagenumbers = true|false`\n * `gridlines = true|false`\n * `fzr = true|false`        // frozen rows on each page\n * `gid = sheet_Id`          // not , see remark below\n\n**NB!** Per sheet exports (employing `gid` sheet id)\navailable only from Sheets open context.\nPlease, use [ExportLink](#exportlink-script) \nGoogle Script.\n\nShort url for each set of export settings can be stored in the\nLINKMAN JSON.\n\n```\npdf : [\n        { settings : export settings,\n          shortUrl : shortened url for given settings\n        },\n        ...\n    ]\n```\n\n##### Google Slides\n\nExport to images is supported on per slide basis and therefore\nis available only from Slides open context.\nPlease, use [ExportLink](#exportlink-script) \nGoogle Script.\n\n##### Google Forms\n\nExporting Google Forms makes no sense. Therefore only `open`\nlink gets shortened.\n\n##### Google Fusion Tables\n\nGoogle Fusion Tables is an experimental application\nand not supported yet. It is most likely exporting those\nwill not make much sense and therefore only `open`\nlink shortening will be available.\n\nIf you feel it's time to start supporting Google Fusion Tables\ndrop the [author](#copyright) a note on that.\n\n### Supported file types\n\nRegistered MIME-types\n```text\ntext/*\napplication/*\nimage/*\nvideo/*\naudio/*\n```\n\nSupported MIME-types (target list)\n```text\ntext/plain\napplication/octet-stream\nimage/gif, image/png, image/jpeg, image/bmp, image/webp\nvideo/webm, video/ogg, video/mp4\naudio/mpeg, audio/webm, audio/ogg, audio/wav\napplication/vnd.mspowerpoint, \napplication/xhtml+xml, application/xml\napplication/pdf\n```\n\nRegistered file extensions\n```text\npdf, png, jpg, jpeg, \nppt, pptx, doc, docx, xls, xlsx,\n```\n\nReserved MIME-types (not targeted)\n```text\ntext/html, text/css, text/javascript\naudio/midi\n```\n\n[Native Google documents MIME-types](https://developers.google.com/drive/v3/web/mime-types)\n\n### Access authorization shortcut\n\nWhile this feature allows to grant\n\"`Anyone with the link can view (download) the file`\"\npowers it is recommended to grant access on per folder basis.\n\nIn either case consider possible negative consequences\nwhen granting any level of access.\n\n[[back to contents]](#contents)\n\n## Installation\n\n### Chrome web-store\n\nInstall the application from [Chrome web-store](https://google.com/).\n\n### Customize the app\n\nClone and customize the script. The resulted app should have been\nhosted somewhere.\n\nOptions for hosting include Google App Engine,\nwhere a simple Python configuration provides an easy-to-use \nway to expose only static content\n(in this case, serving the JavaScript and html). \nOther alternatives include using a Google Drive \npublic folder to host the files, or your own web server.\n\nIn all cases, a configuration will need to be created in the\nGoogle Developers Console, as outlined\n[here](https://developers.google.com/drive/web/enable-sdk).\n\nNote: The resulting App ID, Client ID, and API Key \ngenerated as part of that process will need to be put \ninto the your app's configuration (in actual code).\nFor ZIP Extractor, that configuration information in found\nin `config.js` under the `/js/linkman/` directory.\n\n[[back to contents]](#contents)\n\n## Credits\n\nThese projects were used as a source of inspiration \nand Google Drive Apps building practices:\n * [ZIP Extractor](https://github.com/googledrive/zipextractor)\n * [web-quickeditor](https://github.com/googledrive/web-quickeditor)\n\n[[back to contents]](#contents)\n\n## Copyright\n\n© [Oleksiy Rudenko](https://github.com/OleksiyRudenko), 2017\n\n[[back to contents]](#contents)\n\n## Resources\n* [Drive API](https://developers.google.com/drive/v3/web/install)\n* [Drive App Examples](https://developers.google.com/drive/v3/web/examples/)\n* [ngclipboard](https://sachinchoolur.github.io/ngclipboard/)\n* [Google API Client Library for JavaScript](https://github.com/google/google-api-javascript-client) [170523]\n\n\n### Alternatives\n\n[Direct Link Creator app](http://directlink.booogle.net/)\n\n### Notes\n\nFor native google documents {exportIds} sent to an app\ninstead of {ids}.\n[Details](https://developers.google.com/drive/v3/web/integrate-open)\n\n[File Meta-data](https://developers.google.com/drive/v2/web/file)\n\n[File Properties](https://developers.google.com/drive/v2/web/properties)\n\n[Web Store Listing](https://developers.google.com/drive/v2/web/listing)\n\n[Publishing](https://developers.google.com/apps-marketplace/listing)\n\u0026 [Integrate with button](https://developers.google.com/apps-marketplace/button)\n\n[MIME-types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)\n\n[Web-app checklist](https://developers.google.com/web/progressive-web-apps/checklist)\n\n### App publishing notes\n * add API\n * add and use credentials\n * check app permissions before production\n * verify your ownership of domain your app resides at\n\n### ExportLink script\n[ExportLink](https://google.com/?q=ExportLink+google+script)\nis a script that also is able of generating links for\nindividual sheets and slides.\n\n[[back to contents]](#contents)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foleksiyrudenko%2Fgd-linkman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foleksiyrudenko%2Fgd-linkman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foleksiyrudenko%2Fgd-linkman/lists"}