/* * Copyright (c) 2015-2017, Michael A. Updike All rights reserved. * Licensed under the BSD-3-Clause * https://opensource.org/licenses/BSD-3-Clause * https://github.com/opus1269/photo-screen-saver/blob/master/LICENSE.md */ (function() { 'use strict'; window.app = window.app || {}; new ExceptionHandler(); /** * A photo for the screen saver * * @property {int} _id - Unique id * @property {string} _url - The url to the photo * @property {string} _photographer - The photographer * @property {string} _type - type of {@link app.PhotoSource} * @property {number} _aspectRatio - aspect ratio * @property {Object} _ex - additional information about the photo * @property {string} _point - geolocation 'lat lon' * @property {boolean} _isBad - true if url didn't load * @alias app.SSPhoto */ app.SSPhoto = class SSPhoto { /** * Create a new photo * @param {int} id - unique id * @param {app.PhotoSource.Photo} source - source photo * @param {string} sourceType - type of {@link app.PhotoSource} * @constructor */ constructor(id, source, sourceType) { this._id = id; this._url = source.url; this._photographer = source.author ? source.author : ''; this._type = sourceType; this._aspectRatio = source.asp; this._ex = source.ex; this._point = source.point; this._isBad = false; } /** * Get unique id * @returns {int} id */ getId() { return this._id; } /** * Set unique id * @param {int} id - unique id */ setId(id) { this._id = id; } /** * Is photo bad * @returns {boolean} true if bad */ isBad() { return this._isBad; } /** * Mark photo unusable */ markBad() { this._isBad = true; } /** * Get photo url * @returns {string} url */ getUrl() { return this._url; } /** * Get photo source type * @returns {string} type */ getType() { return this._type; } /** * Get photographer * @returns {string} photographer */ getPhotographer() { return this._photographer; } /** * Get photo aspect ratio * @returns {number} aspect ratio */ getAspectRatio() { return this._aspectRatio; } /** * Get geo location point * @returns {?string} point */ getPoint() { return this._point; } /** * Create a new tab with a link to the * original source of the photo, if possible */ showSource() { let regex; let id; let url = null; switch (this._type) { case '500': // parse photo id regex = /(\/[^/]*){4}/; id = this._url.match(regex); url = `http://500px.com/photo${id[1]}`; break; case 'flickr': if (this._ex) { // parse photo id regex = /(\/[^/]*){4}(_.*_)/; id = this._url.match(regex); url = `https://www.flickr.com/photos/${this._ex}${id[1]}`; } break; case 'reddit': if (this._ex) { url = this._ex; } break; default: if (this._type !== 'Google User') { url = this._url; } break; } if (url !== null) { chrome.tabs.create({url: url}); } } }; })();