Created
March 2, 2016 12:16
-
-
Save maxlath/8994f08f45df4bf4cdb2 to your computer and use it in GitHub Desktop.
app.js missing the templates/confirmation_modal file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function() { | |
| 'use strict'; | |
| var globals = typeof window === 'undefined' ? global : window; | |
| if (typeof globals.require === 'function') return; | |
| var modules = {}; | |
| var cache = {}; | |
| var aliases = {}; | |
| var has = ({}).hasOwnProperty; | |
| var endsWith = function(str, suffix) { | |
| return str.indexOf(suffix, str.length - suffix.length) !== -1; | |
| }; | |
| var _cmp = 'components/'; | |
| var unalias = function(alias, loaderPath) { | |
| var start = 0; | |
| if (loaderPath) { | |
| if (loaderPath.indexOf(_cmp) === 0) { | |
| start = _cmp.length; | |
| } | |
| if (loaderPath.indexOf('/', start) > 0) { | |
| loaderPath = loaderPath.substring(start, loaderPath.indexOf('/', start)); | |
| } | |
| } | |
| var result = aliases[alias + '/index.js'] || aliases[loaderPath + '/deps/' + alias + '/index.js']; | |
| if (result) { | |
| return _cmp + result.substring(0, result.length - '.js'.length); | |
| } | |
| return alias; | |
| }; | |
| var _reg = /^\.\.?(\/|$)/; | |
| var expand = function(root, name) { | |
| var results = [], part; | |
| var parts = (_reg.test(name) ? root + '/' + name : name).split('/'); | |
| for (var i = 0, length = parts.length; i < length; i++) { | |
| part = parts[i]; | |
| if (part === '..') { | |
| results.pop(); | |
| } else if (part !== '.' && part !== '') { | |
| results.push(part); | |
| } | |
| } | |
| return results.join('/'); | |
| }; | |
| var dirname = function(path) { | |
| return path.split('/').slice(0, -1).join('/'); | |
| }; | |
| var localRequire = function(path) { | |
| return function expanded(name) { | |
| var absolute = expand(dirname(path), name); | |
| return globals.require(absolute, path); | |
| }; | |
| }; | |
| var initModule = function(name, definition) { | |
| var module = {id: name, exports: {}}; | |
| cache[name] = module; | |
| definition(module.exports, localRequire(name), module); | |
| return module.exports; | |
| }; | |
| var require = function(name, loaderPath) { | |
| var path = expand(name, '.'); | |
| if (loaderPath == null) loaderPath = '/'; | |
| path = unalias(name, loaderPath); | |
| if (has.call(cache, path)) return cache[path].exports; | |
| if (has.call(modules, path)) return initModule(path, modules[path]); | |
| var dirIndex = expand(path, './index'); | |
| if (has.call(cache, dirIndex)) return cache[dirIndex].exports; | |
| if (has.call(modules, dirIndex)) return initModule(dirIndex, modules[dirIndex]); | |
| throw new Error('Cannot find module "' + name + '" from '+ '"' + loaderPath + '"'); | |
| }; | |
| require.alias = function(from, to) { | |
| aliases[to] = from; | |
| }; | |
| require.register = require.define = function(bundle, fn) { | |
| if (typeof bundle === 'object') { | |
| for (var key in bundle) { | |
| if (has.call(bundle, key)) { | |
| modules[key] = bundle[key]; | |
| } | |
| } | |
| } else { | |
| modules[bundle] = fn; | |
| } | |
| }; | |
| require.list = function() { | |
| var result = []; | |
| for (var item in modules) { | |
| if (has.call(modules, item)) { | |
| result.push(item); | |
| } | |
| } | |
| return result; | |
| }; | |
| require.brunch = true; | |
| require._cache = cache; | |
| globals.require = require; | |
| })(); | |
| require.register("api/api", function(exports, require, module) { | |
| module.exports = function(_) { | |
| return { | |
| auth: require('./auth'), | |
| users: require('./users'), | |
| groups: require('./groups'), | |
| items: require('./items'), | |
| entities: require('./entities'), | |
| services: require('./services'), | |
| data: require('./data'), | |
| img: sharedLib('api/img')(_), | |
| comments: { | |
| "public": '/api/comments/public', | |
| "private": '/api/comments' | |
| }, | |
| transactions: '/api/transactions', | |
| relations: '/api/relations', | |
| invitations: '/api/invitations', | |
| user: '/api/user', | |
| notifs: '/api/notifs', | |
| feedback: '/api/feedback/public', | |
| i18n: function(lang) { | |
| return "/public/i18n/dist/" + lang + ".json?DIGEST152"; | |
| }, | |
| moment: function(lang) { | |
| return "/public/javascripts/moment/" + lang + ".js?DIGEST"; | |
| }, | |
| proxy: function(url) { | |
| return "/api/proxy/public/" + url; | |
| }, | |
| test: '/api/tests/public', | |
| scripts: { | |
| pouchdb: '/public/javascripts/pouchdb-3.3.1.min.js' | |
| }, | |
| upload: { | |
| post: '/api/upload', | |
| del: '/api/upload/delete' | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("api/auth", function(exports, require, module) { | |
| var auth, authPublic; | |
| auth = function(action) { | |
| return "/api/auth?action=" + action; | |
| }; | |
| authPublic = function(action) { | |
| return "/api/auth/public?action=" + action; | |
| }; | |
| module.exports = { | |
| signup: authPublic('signup'), | |
| login: authPublic('login'), | |
| logout: authPublic('logout'), | |
| usernameAvailability: authPublic('username-availability'), | |
| emailAvailability: authPublic('email-availability'), | |
| emailConfirmation: auth('email-confirmation'), | |
| updatePassword: auth('update-password'), | |
| resetPassword: authPublic('reset-password') | |
| }; | |
| }); | |
| ;require.register("api/commons", function(exports, require, module) { | |
| module.exports = { | |
| search: function(base, text) { | |
| return _.buildPath(base, { | |
| action: 'search', | |
| search: text | |
| }); | |
| }, | |
| searchByPosition: function(base, bbox) { | |
| return _.buildPath(base, { | |
| action: 'search-by-position', | |
| bbox: JSON.stringify(bbox) | |
| }); | |
| } | |
| }; | |
| }); | |
| ;require.register("api/data", function(exports, require, module) { | |
| var dataQuery; | |
| dataQuery = _.buildPath.bind(_, '/api/data/public'); | |
| module.exports = { | |
| wdQuery: function(query, qid, refresh) { | |
| return dataQuery({ | |
| api: 'wd-query', | |
| query: query, | |
| qid: qid, | |
| refresh: refresh | |
| }); | |
| }, | |
| wdq: function(query, pid, qid, refresh) { | |
| return dataQuery({ | |
| api: 'wdq', | |
| query: query, | |
| pid: pid, | |
| qid: qid, | |
| refresh: refresh | |
| }); | |
| }, | |
| commonsThumb: function(file, width) { | |
| return dataQuery({ | |
| api: 'commons-thumb', | |
| file: file, | |
| width: width | |
| }); | |
| }, | |
| wikipediaExtract: function(lang, title) { | |
| return dataQuery({ | |
| api: 'wp-extract', | |
| lang: lang, | |
| title: title | |
| }); | |
| }, | |
| openLibraryCover: function(openLibraryId, type) { | |
| if (type == null) { | |
| type = 'book'; | |
| } | |
| return dataQuery({ | |
| api: 'openlibrary-cover', | |
| id: openLibraryId, | |
| type: type | |
| }); | |
| }, | |
| enWpImage: function(enWpTitle) { | |
| return dataQuery({ | |
| api: 'en-wikipedia-image', | |
| title: enWpTitle | |
| }); | |
| } | |
| }; | |
| }); | |
| ;require.register("api/entities", function(exports, require, module) { | |
| module.exports = { | |
| search: function(search) { | |
| return _.buildPath("/api/entities/public", { | |
| action: 'search', | |
| search: search, | |
| language: app.user.lang | |
| }); | |
| }, | |
| getImages: function(entityUri, data) { | |
| return _.buildPath("/api/entities/public", { | |
| action: 'get-images', | |
| entity: entityUri, | |
| data: data | |
| }); | |
| }, | |
| isbns: function(isbns) { | |
| return _.buildPath('/api/entities/public', { | |
| action: 'get-isbn-entities', | |
| isbns: _.piped(isbns) | |
| }); | |
| }, | |
| inv: { | |
| create: '/api/entities', | |
| get: function(ids) { | |
| return _.buildPath('/api/entities/public', { | |
| action: 'get-inv-entities', | |
| ids: _.piped(ids) | |
| }); | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("api/groups", function(exports, require, module) { | |
| var privat, publik, ref, search, searchByPosition; | |
| privat = '/api/groups'; | |
| publik = '/api/groups/public'; | |
| ref = require('./commons'), search = ref.search, searchByPosition = ref.searchByPosition; | |
| module.exports = { | |
| "private": privat, | |
| "public": publik, | |
| last: publik + "?action=last", | |
| search: search.bind(null, publik), | |
| searchByPosition: searchByPosition.bind(null, publik) | |
| }; | |
| }); | |
| ;require.register("api/items", function(exports, require, module) { | |
| var base, itemsPublic, publicBase; | |
| base = '/api/items'; | |
| publicBase = '/api/items/public'; | |
| itemsPublic = function(action, query) { | |
| if (query == null) { | |
| query = {}; | |
| } | |
| return _.buildPath(publicBase, _.extend(query, { | |
| action: action | |
| })); | |
| }; | |
| module.exports = { | |
| base: base, | |
| lastPublicItems: function(limit, offset, assertImage) { | |
| if (limit == null) { | |
| limit = 15; | |
| } | |
| if (offset == null) { | |
| offset = 0; | |
| } | |
| return itemsPublic('last-public-items', { | |
| limit: limit, | |
| offset: offset, | |
| 'assert-image': assertImage | |
| }); | |
| }, | |
| publicNearby: function(range) { | |
| if (range == null) { | |
| range = 50; | |
| } | |
| return _.buildPath(base, { | |
| action: 'get-items-nearby', | |
| range: range | |
| }); | |
| }, | |
| publicById: function(id) { | |
| return itemsPublic('public-by-id', { | |
| id: id | |
| }); | |
| }, | |
| publicByEntity: function(uri) { | |
| return itemsPublic('public-by-entity', { | |
| uri: uri | |
| }); | |
| }, | |
| publicByUsernameAndEntity: function(username, EntityUri) { | |
| return itemsPublic('public-by-username-and-entity', { | |
| username: username, | |
| uri: EntityUri | |
| }); | |
| }, | |
| usersPublicItems: function(usersIds) { | |
| usersIds = _.forceArray(usersIds); | |
| return itemsPublic('users-public-items', { | |
| users: usersIds.join('|') | |
| }); | |
| } | |
| }; | |
| }); | |
| ;require.register("api/services", function(exports, require, module) { | |
| module.exports = { | |
| emailValidation: function(email) { | |
| email = encodeURIComponent(email); | |
| return "/api/services/public?service=email-validation&email=" + email; | |
| } | |
| }; | |
| }); | |
| ;require.register("api/users", function(exports, require, module) { | |
| var privat, publik, ref, search, searchByPosition; | |
| privat = '/api/users'; | |
| publik = '/api/users/public'; | |
| ref = require('./commons'), search = ref.search, searchByPosition = ref.searchByPosition; | |
| module.exports = { | |
| data: function(ids) { | |
| ids = _.forceArray(ids); | |
| if (_.all(ids, _.isUserId)) { | |
| ids = ids.join('|'); | |
| return privat + "?action=get-users&ids=" + ids; | |
| } else { | |
| throw new Error("users data API needs an array of valid user ids"); | |
| } | |
| }, | |
| items: function(ids) { | |
| ids = _.forceArray(ids); | |
| if (ids != null) { | |
| ids = ids.join('|'); | |
| return privat + "?action=get-items&ids=" + ids; | |
| } else { | |
| throw new Error("users' items API needs an id"); | |
| } | |
| }, | |
| search: search.bind(null, publik), | |
| searchByPosition: searchByPosition.bind(null, publik), | |
| publicItemsNearby: function(range) { | |
| if (range == null) { | |
| range = 50; | |
| } | |
| return _.buildPath(privat, { | |
| action: 'get-items-nearby', | |
| range: range | |
| }); | |
| } | |
| }; | |
| }); | |
| ;require.register("app", function(exports, require, module) { | |
| var App, Session, scrollToPageTop; | |
| Session = require('modules/general/models/session'); | |
| App = Marionette.Application.extend({ | |
| initialize: function() { | |
| this.session = new Session; | |
| this.vent = new Backbone.Wreqr.EventAggregator(); | |
| this.Behaviors = require('modules/general/behaviors/base'); | |
| this.Behaviors.initialize(); | |
| this.docTitle = function(docTitle, noCompletion) { | |
| return this.execute('metadata:update:title', docTitle, noCompletion); | |
| }; | |
| this.navigate = function(route, options) { | |
| var base; | |
| if (!_.isString(route)) { | |
| return _.error(route, "invalid route: can't navigate"); | |
| } | |
| route = route.replace(/^\//, ''); | |
| this.vent.trigger('route:change', _.routeSection(route), route); | |
| this.session.record(route); | |
| route = route.replace(/(\s|')/g, '_'); | |
| route = this.request('route:querystring:keep', route); | |
| (base = Backbone.history).last || (base.last = []); | |
| Backbone.history.last.unshift(route); | |
| Backbone.history.navigate(route, options); | |
| if (!(options != null ? options.preventScrollTop : void 0)) { | |
| return scrollToPageTop(); | |
| } | |
| }; | |
| this.goTo = function(route, options) { | |
| options || (options = {}); | |
| options.trigger = true; | |
| return Backbone.history.navigate(route, options); | |
| }; | |
| this.navigateReplace = function(route, options) { | |
| options || (options = {}); | |
| options.replace = true; | |
| return this.navigate(route, options); | |
| }; | |
| return this.once('start', (function(_this) { | |
| return function(options) { | |
| var routeFound; | |
| routeFound = Backbone.history.start({ | |
| pushState: true | |
| }); | |
| _this.session.record(Backbone.history.fragment); | |
| Backbone.history.on('route', function() { | |
| var route; | |
| route = _.currentRoute(); | |
| return app.vent.trigger('route:change', _.routeSection(route), route); | |
| }); | |
| if (!routeFound) { | |
| console.error('route: not found! check if route is defined before app.start()'); | |
| return _.log(Backbone.history.handlers, 'route: handlers at start'); | |
| } | |
| }; | |
| })(this)); | |
| } | |
| }); | |
| module.exports = new App(); | |
| scrollToPageTop = function() { | |
| return window.scrollTo(0, 0); | |
| }; | |
| }); | |
| ;require.register("init_app", function(exports, require, module) { | |
| module.exports = function() { | |
| var AppLayout, LocalDB, _, app; | |
| app = require('app'); | |
| window.app = app; | |
| _ = require('lib/builders/utils')(Backbone, window._, app, window); | |
| app.API = require('api/api')(_); | |
| require('lib/handlebars_helpers/base').initialize(app.API); | |
| require('lib/global_libs_extender')(_); | |
| require('lib/global_helpers')(app, _); | |
| LocalDB = require('lib/data/local_db')(window, _); | |
| app.LocalCache = require('lib/data/local_cache')(LocalDB, _, require('lib/preq')); | |
| app.data = require('lib/data_state'); | |
| app.data.initialize(); | |
| require('lib/i18n').initialize(app); | |
| app.module('Redirect', require('modules/redirect')); | |
| app.module('Users', require('modules/users/users')); | |
| app.module('Entities', require('modules/entities/entities')); | |
| app.module('User', require('modules/user/user')); | |
| app.module('Search', require('modules/search/search')); | |
| app.module('Inventory', require('modules/inventory/inventory')); | |
| app.module('Transactions', require('modules/transactions/transactions')); | |
| app.module('Network', require('modules/network/network')); | |
| app.module('Notifications', require('modules/notifications/notifications')); | |
| app.module('Settings', require('modules/settings/settings')); | |
| require('modules/map/map')(); | |
| require('modules/comments/comments')(); | |
| AppLayout = require('modules/general/views/app_layout'); | |
| app.request('i18n:set').done(function() { | |
| return $(function() { | |
| app.layout = new AppLayout; | |
| require('lib/foundation').initialize(app); | |
| app.execute('show:user:menu:update'); | |
| app.start(); | |
| app.vent.trigger('layout:ready'); | |
| return app.layout.ready = true; | |
| }); | |
| }); | |
| require('lib/piwik')(); | |
| return require('lib/jquery-jk').initialize($); | |
| }; | |
| }); | |
| ;require.register("initialize", function(exports, require, module) { | |
| var envConfig, featureDetection, initApp, reportError; | |
| envConfig = require('lib/env_config')(); | |
| window.sharedLib = require('lib/shared/shared_libs'); | |
| window.requireProxy = function(path) { | |
| return require(path); | |
| }; | |
| featureDetection = require('lib/feature_detection'); | |
| initApp = require('./init_app'); | |
| reportError = function(label, err) { | |
| if ((typeof _ !== "undefined" && _ !== null ? _.error : void 0) != null) { | |
| return _.error(label, err); | |
| } else { | |
| throw err; | |
| } | |
| }; | |
| featureDetection()["catch"](reportError.bind(null, 'featureDetection err')).then(initApp); | |
| require('lib/unhandled_error_logger').initialize(); | |
| }); | |
| ;require.register("lib/allow_persistant_query", function(exports, require, module) { | |
| var allowRedirectPersistantQuery, alwaysKeep, redirectTest, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| alwaysKeep = function() { | |
| return true; | |
| }; | |
| redirectTest = function(section) { | |
| return indexOf.call(allowRedirectPersistantQuery, section) >= 0; | |
| }; | |
| allowRedirectPersistantQuery = ['signup', 'login']; | |
| module.exports = { | |
| debug: alwaysKeep, | |
| lang: alwaysKeep, | |
| redirect: redirectTest | |
| }; | |
| }); | |
| ;require.register("lib/books", function(exports, require, module) { | |
| var books_; | |
| books_ = sharedLib('books')(_); | |
| books_.getImage = function(entityUri, data) { | |
| return _.preq.get(app.API.entities.getImages(entityUri, data)).then(_.property('images')); | |
| }; | |
| books_.getIsbnEntities = function(isbns) { | |
| isbns = isbns.map(books_.normalizeIsbn); | |
| return _.preq.get(app.API.entities.isbns(isbns))["catch"](_.Error('getIsbnEntities err')); | |
| }; | |
| module.exports = books_; | |
| }); | |
| ;require.register("lib/builders/utils", function(exports, require, module) { | |
| module.exports = function(Backbone, _, app, window) { | |
| var csle, local, shared_; | |
| _ = window.invUtils(_); | |
| csle = CONFIG.debug ? window.console : require('lib/noop_console'); | |
| local = require('lib/utils')(Backbone, _, app, window, csle); | |
| shared_ = sharedLib('utils'); | |
| _.extend(_, local, shared_); | |
| _.preq = require('lib/preq'); | |
| _.isMobile = require('lib/mobile_check'); | |
| return _; | |
| }; | |
| }); | |
| ;require.register("lib/data/local_cache", function(exports, require, module) { | |
| module.exports = function(LocalDB, _, promises_) { | |
| var LocalCache; | |
| return LocalCache = function(options) { | |
| var API, args, completeWithRemoteData, defaultParser, findId, findMissingIds, formatData, getLocalData, getMissingData, localdb, logError, name, normalizeId, parseData, parseJSON, putInLocalDb, putLocalData, remote, types; | |
| name = options.name, remote = options.remote, normalizeId = options.normalizeId, parseData = options.parseData; | |
| args = [name, remote, normalizeId, parseData]; | |
| types = ['string', 'object', 'function|undefined', 'function|undefined']; | |
| _.types(args, types); | |
| localdb = LocalDB(name); | |
| defaultParser = _.identity; | |
| parseData || (parseData = defaultParser); | |
| API = { | |
| get: function(ids, format, refresh) { | |
| var err, error, promise; | |
| try { | |
| ids = _.forceArray(ids); | |
| } catch (error) { | |
| err = error; | |
| return Promise.reject(err); | |
| } | |
| if (ids.length === 0) { | |
| promise = _.preq.resolve({}); | |
| } else if (refresh) { | |
| promise = getMissingData(ids); | |
| } else { | |
| promise = getLocalData(ids).then(completeWithRemoteData); | |
| } | |
| return promise.then(formatData.bind(null, format))["catch"](logError); | |
| }, | |
| save: function(id, value) { | |
| _.types(arguments, ['string', 'object']); | |
| return putInLocalDb(id, value); | |
| }, | |
| reset: function() { | |
| return localdb.destroy(); | |
| }, | |
| db: localdb | |
| }; | |
| getLocalData = function(ids) { | |
| _.types(ids, 'strings...'); | |
| if (normalizeId != null) { | |
| ids = ids.map(normalizeId); | |
| } | |
| return localdb.get(ids).then(parseJSON); | |
| }; | |
| parseJSON = function(data) { | |
| var err, error, k, parsed, v; | |
| _.type(data, 'object'); | |
| parsed = {}; | |
| for (k in data) { | |
| v = data[k]; | |
| try { | |
| parsed[k] = JSON.parse(v); | |
| } catch (error) { | |
| err = error; | |
| _.error("invalid json: " + v); | |
| } | |
| } | |
| return parsed; | |
| }; | |
| completeWithRemoteData = function(data) { | |
| var missingIds; | |
| _.type(data, 'object'); | |
| missingIds = findMissingIds(data); | |
| if (missingIds.length > 0) { | |
| return getMissingData(missingIds).then(function(missingData) { | |
| return _.extend(data, missingData); | |
| }); | |
| } else { | |
| return data; | |
| } | |
| }; | |
| findMissingIds = function(data) { | |
| var k, missingIds, v; | |
| _.type(data, 'object'); | |
| missingIds = []; | |
| for (k in data) { | |
| v = data[k]; | |
| if (v == null) { | |
| missingIds.push(k); | |
| } | |
| } | |
| return missingIds; | |
| }; | |
| getMissingData = function(ids) { | |
| var promise; | |
| _.type(ids, 'array'); | |
| promise = remote.get(ids).then(parseData); | |
| if ((promise != null ? promise.then : void 0) == null) { | |
| throw new Error('couldnt get missing data'); | |
| } | |
| promise.then(putLocalData); | |
| return promise; | |
| }; | |
| putLocalData = function(data) { | |
| var id, v; | |
| _.type(data, 'object'); | |
| for (id in data) { | |
| v = data[id]; | |
| putInLocalDb(id, v); | |
| } | |
| return data; | |
| }; | |
| putInLocalDb = function(id, value) { | |
| _.types(arguments, ['string', 'object']); | |
| localdb.put(id, JSON.stringify(value)); | |
| return value; | |
| }; | |
| formatData = function(format, data) { | |
| if (format == null) { | |
| format = 'index'; | |
| } | |
| _.type(data, 'object'); | |
| if (format === 'collection') { | |
| data = _.values(data); | |
| } | |
| return data; | |
| }; | |
| logError = function(err) { | |
| _.error(err, 'local cache err'); | |
| }; | |
| if (remote.post != null) { | |
| API.post = function(data) { | |
| return remote.post(data).then(function(res) { | |
| var id; | |
| id = findId(res); | |
| return putInLocalDb(id, res); | |
| })["catch"](_.Error(name + " local.post err")); | |
| }; | |
| findId = function(res) { | |
| var id; | |
| id = res._id || res.id; | |
| if (id != null) { | |
| return id; | |
| } else { | |
| throw new Error("id not found: " + (JSON.stringify(res))); | |
| } | |
| }; | |
| } | |
| _.extend(this, API); | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/data/local_db", function(exports, require, module) { | |
| var resetDbsPeriodically; | |
| resetDbsPeriodically = require('./reset_dbs_periodically'); | |
| module.exports = function(global, _) { | |
| var DB, Level, LocalDB, deleteBatch, inspect, pushKey, reset; | |
| global.dbs = { | |
| list: {} | |
| }; | |
| if (window.supportsIndexedDB) { | |
| DB = LevelJs; | |
| _.log('supportsIndexedDB true: using LevelJs'); | |
| setTimeout(resetDbsPeriodically, 10 * 1000); | |
| } else { | |
| DB = MemDown; | |
| _.log('supportsIndexedDB false: using MemDown'); | |
| } | |
| Level = function(dbName) { | |
| return LevelMultiply(LevelUp(dbName, { | |
| db: DB | |
| })); | |
| }; | |
| reset = function(db, dbName) { | |
| var ops; | |
| ops = []; | |
| return db.createKeyStream().on('data', pushKey.bind(null, ops)).on('end', deleteBatch.bind(null, db, ops, dbName)); | |
| }; | |
| inspect = function(db, dbName) { | |
| var dbObj; | |
| dbObj = {}; | |
| return db.createReadStream().on('data', function(res) { | |
| var key, value; | |
| key = res.key, value = res.value; | |
| return _.log(JSON.parse(value), key); | |
| }).on('end', _.Log("-- " + dbName + " inspect end")); | |
| }; | |
| pushKey = function(ops, key) { | |
| return ops.push({ | |
| type: 'del', | |
| key: key | |
| }); | |
| }; | |
| deleteBatch = function(db, ops, dbName) { | |
| return db.batch(ops, function(err) { | |
| if (err) { | |
| return _.log(err, dbName + " reset failed"); | |
| } else { | |
| return _.log(dbName + " reset successfully!"); | |
| } | |
| }); | |
| }; | |
| dbs.reset = function() { | |
| var db, dbName, ref, results; | |
| ref = dbs.list; | |
| results = []; | |
| for (dbName in ref) { | |
| db = ref[dbName]; | |
| results.push(db.reset()); | |
| } | |
| return results; | |
| }; | |
| dbs.inspect = function() { | |
| var db, dbName, ref, results; | |
| ref = dbs.list; | |
| results = []; | |
| for (dbName in ref) { | |
| db = ref[dbName]; | |
| results.push(db.inspect()); | |
| } | |
| return results; | |
| }; | |
| return LocalDB = function(dbName) { | |
| var API, db; | |
| db = Level(dbName); | |
| API = { | |
| get: Promise.promisify(db.get), | |
| put: Promise.promisify(db.put), | |
| batch: Promise.promisify(db.batch), | |
| reset: reset.bind(null, db, dbName), | |
| inspect: inspect.bind(null, db, dbName), | |
| db: db | |
| }; | |
| return dbs.list[dbName] = API; | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/data/reset_dbs_periodically", function(exports, require, module) { | |
| var getLastResetTime, initPeriodicalReset, period, periodIsOver, resetDbsNow, resetIfOnline; | |
| period = 15 * 24 * 3600 * 1000; | |
| module.exports = function() { | |
| var lastResetTime; | |
| lastResetTime = getLastResetTime(); | |
| if (lastResetTime == null) { | |
| return initPeriodicalReset(); | |
| } | |
| if (periodIsOver(lastResetTime)) { | |
| return app.request('ifOnline', resetIfOnline); | |
| } else { | |
| return _.log(lastResetTime, 'not reseting dbs: last reset is fresh enough'); | |
| } | |
| }; | |
| resetIfOnline = function() { | |
| return resetDbsNow('starting periodic dbs.reset'); | |
| }; | |
| getLastResetTime = function() { | |
| var lastReset; | |
| lastReset = localStorageProxy.getItem('last_db_reset'); | |
| lastReset = Number(lastReset); | |
| if (_.typeOf(lastReset) === 'number') { | |
| return lastReset; | |
| } else { | |
| } | |
| }; | |
| initPeriodicalReset = function() { | |
| return resetDbsNow('intializing dbs.reset'); | |
| }; | |
| periodIsOver = function(lastResetTime) { | |
| return _.now() - lastResetTime > period; | |
| }; | |
| resetDbsNow = function(label) { | |
| if (label != null) { | |
| _.log(label); | |
| } | |
| dbs.reset(); | |
| return localStorageProxy.setItem('last_db_reset', _.now()); | |
| }; | |
| }); | |
| ;require.register("lib/data_state", function(exports, require, module) { | |
| var data, findMissingDataSets, initDataWaiters, online, ping; | |
| app.online = online = null; | |
| initDataWaiters = require('./data_waiters'); | |
| module.exports = { | |
| initialize: function() { | |
| this.ready = false; | |
| this._updateStatus(); | |
| setTimeout(this.warnOnExcessiveTime.bind(this), 8000); | |
| ping(); | |
| initDataWaiters(); | |
| return app.reqres.setHandlers({ | |
| 'ifOnline': function(success, showOfflineError) { | |
| var cb; | |
| cb = function() { | |
| if (online) { | |
| return success(); | |
| } else { | |
| if (showOfflineError) { | |
| return app.execute('show:offline:error'); | |
| } else { | |
| return console.warn("can't reach the server"); | |
| } | |
| } | |
| }; | |
| if (online != null) { | |
| return cb(); | |
| } else { | |
| return app.vent.once('app:online', cb()); | |
| } | |
| } | |
| }); | |
| }, | |
| _updateStatus: function() { | |
| if (this.missing == null) { | |
| this.missing = findMissingDataSets(); | |
| this._listenForReadyEvents(); | |
| } else { | |
| this.missing = findMissingDataSets(); | |
| } | |
| return this._checkIfDataReady(); | |
| }, | |
| _listenForReadyEvents: function() { | |
| var el, i, len, ref, results; | |
| ref = this.missing; | |
| results = []; | |
| for (i = 0, len = ref.length; i < len; i++) { | |
| el = ref[i]; | |
| results.push(app.vent.once(el.eventName, app.data._updateStatus, app.data)); | |
| } | |
| return results; | |
| }, | |
| _checkIfDataReady: function() { | |
| if (this.missing.length === 0) { | |
| this.ready = true; | |
| app.vent.trigger('data:ready'); | |
| setTimeout(app.vent.trigger.bind(app.vent, 'data:ready:after'), 100); | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }, | |
| warnOnExcessiveTime: function() { | |
| var warn; | |
| if (!this.ready) { | |
| warn = 'data:ready didnt arrived yet! Missing events:'; | |
| return console.warn(warn, this.missingEvents()); | |
| } | |
| }, | |
| missingEvents: function() { | |
| return JSON.stringify(_.pluck(this.missing, 'eventName')); | |
| } | |
| }; | |
| findMissingDataSets = function() { | |
| var el, i, len, missing; | |
| missing = []; | |
| for (i = 0, len = data.length; i < len; i++) { | |
| el = data[i]; | |
| if (!el.ready()) { | |
| missing.push(el); | |
| } | |
| } | |
| return missing; | |
| }; | |
| data = [ | |
| { | |
| eventName: 'user:ready', | |
| ready: function() { | |
| var ref; | |
| return typeof app !== "undefined" && app !== null ? (ref = app.user) != null ? ref.fetched : void 0 : void 0; | |
| } | |
| }, { | |
| eventName: 'items:ready', | |
| ready: function() { | |
| var ref; | |
| return typeof Items !== "undefined" && Items !== null ? (ref = Items.personal) != null ? ref.fetched : void 0 : void 0; | |
| } | |
| }, { | |
| eventName: 'users:ready', | |
| ready: function() { | |
| var ref; | |
| return typeof app !== "undefined" && app !== null ? (ref = app.users) != null ? ref.fetched : void 0 : void 0; | |
| } | |
| } | |
| ]; | |
| ping = function() { | |
| return _.preq.get(app.API.test).then(function() { | |
| online = true; | |
| return app.vent.trigger('app:online'); | |
| })["catch"](function(err) { | |
| online = false; | |
| return console.warn('server: unreachable. You might be offline', err); | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/data_waiters", function(exports, require, module) { | |
| module.exports = function() { | |
| var Waiter, waitForItems; | |
| Waiter = function(eventName, ready) { | |
| var fn; | |
| _.time(eventName); | |
| fn = function() { | |
| if (ready()) { | |
| return _.preq.resolved; | |
| } else { | |
| return new Promise(function(resolve, reject) { | |
| return app.vent.once(eventName, function() { | |
| _.timeEnd(eventName); | |
| return resolve(); | |
| }); | |
| }); | |
| } | |
| }; | |
| return _.once(fn); | |
| }; | |
| waitForItems = function() { | |
| var ref, ref1; | |
| if (!app.user.loggedIn) { | |
| return _.preq.resolved; | |
| } | |
| if ((typeof Items !== "undefined" && Items !== null ? (ref = Items.friends) != null ? ref.fetched : void 0 : void 0) && ((ref1 = Items.personal) != null ? ref1.fetched : void 0)) { | |
| return _.preq.resolved; | |
| } else { | |
| return new Promise(function(resolve, reject) { | |
| app.vent.once('friends:items:ready', function() { | |
| var ref2; | |
| if ((ref2 = Items.personal) != null ? ref2.fetched : void 0) { | |
| return resolve(); | |
| } | |
| }); | |
| return app.vent.once('items:ready', function() { | |
| var ref2; | |
| if ((ref2 = Items.friends) != null ? ref2.fetched : void 0) { | |
| return resolve(); | |
| } | |
| }); | |
| }); | |
| } | |
| }; | |
| return app.reqres.setHandlers({ | |
| 'waitForData': Waiter('data:ready', function() { | |
| return app.data.ready; | |
| }), | |
| 'waitForData:after': Waiter('data:ready:after', function() { | |
| return app.data.ready; | |
| }), | |
| 'waitForUserData': Waiter('user:ready', function() { | |
| var ref; | |
| return (ref = app.user) != null ? ref.fetched : void 0; | |
| }), | |
| 'waitForFriendsItems': Waiter('friends:items:ready', function() { | |
| var ref; | |
| return typeof Items !== "undefined" && Items !== null ? (ref = Items.friends) != null ? ref.fetched : void 0 : void 0; | |
| }), | |
| 'waitForItems': _.once(waitForItems), | |
| 'waitForLayout': Waiter('layout:ready', function() { | |
| var ref; | |
| return (ref = app.layout) != null ? ref.ready : void 0; | |
| }) | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/env_config", function(exports, require, module) { | |
| if (location.hostname === 'localhost') { | |
| window.env = 'dev'; | |
| } else { | |
| window.env = 'prod'; | |
| } | |
| module.exports = function() { | |
| if (env === 'dev') { | |
| Promise.config({ | |
| longStackTraces: true, | |
| warnings: { | |
| wForgottenReturn: false | |
| } | |
| }); | |
| } | |
| return window.CONFIG = { | |
| images: { | |
| maxSize: 1600 | |
| }, | |
| debug: false | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/error", function(exports, require, module) { | |
| var error_, throwComplete; | |
| error_ = { | |
| "new": function(message, context) { | |
| var err; | |
| err = new Error(message); | |
| err.context = context; | |
| return err; | |
| }, | |
| complete: function(selector, err) { | |
| err.selector = selector; | |
| return err; | |
| } | |
| }; | |
| throwComplete = function(selector, err) { | |
| err.selector = selector; | |
| throw err; | |
| }; | |
| error_.Complete = function(selector) { | |
| return throwComplete.bind(null, selector); | |
| }; | |
| module.exports = error_; | |
| }); | |
| ;require.register("lib/feature_detection", function(exports, require, module) { | |
| var ISODatePolyFill, sayHi, setDebugSetting, solveIdbSupport, testFlexSupport, testIndexedDbSupport, testLocalStorage; | |
| module.exports = function() { | |
| ISODatePolyFill(); | |
| sayHi(); | |
| testFlexSupport(); | |
| testLocalStorage(); | |
| setDebugSetting(); | |
| return testIndexedDbSupport(); | |
| }; | |
| sayHi = function() { | |
| return console.log("\n,___,\n[-.-] I've been expecting you, Mr Bond\n/)__)\n-\"--\"-\nWant to make Inventaire better? Jump in! https://github.com/inventaire/inventaire\nGuidelines and inspiration: https://inventaire.io/guidelines-and-inspiration\n------"); | |
| }; | |
| testFlexSupport = function() { | |
| var detector; | |
| detector = document.createElement('detect'); | |
| detector.style.display = 'flex'; | |
| if (detector.style.display !== 'flex') { | |
| return console.warn('Flex is not supported'); | |
| } | |
| }; | |
| ISODatePolyFill = function() { | |
| var pad; | |
| if (typeof DatetoISOString === "undefined" || DatetoISOString === null) { | |
| pad = function(number) { | |
| if (number < 10) { | |
| return '0' + number; | |
| } | |
| return number; | |
| }; | |
| return Date.prototype.toISOString = function() { | |
| return this.getUTCFullYear() + '-' + pad(this.getUTCMonth() + 1) + '-' + pad(this.getUTCDate()) + 'T' + pad(this.getUTCHours()) + ':' + pad(this.getUTCMinutes()) + ':' + pad(this.getUTCSeconds()) + '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z'; | |
| }; | |
| } | |
| }; | |
| testLocalStorage = function() { | |
| var err, error, localStorageProxy, storage; | |
| try { | |
| window.localStorage.setItem('localStorage-support', true); | |
| localStorageProxy = localStorage; | |
| } catch (error) { | |
| err = error; | |
| console.warn('localStorage isnt supported'); | |
| storage = {}; | |
| localStorageProxy = { | |
| getItem: function(key) { | |
| return storage[key] || null; | |
| }, | |
| setItem: function(key, value) { | |
| storage[key] = value; | |
| }, | |
| clear: function() { | |
| return storage = {}; | |
| } | |
| }; | |
| } | |
| return window.localStorageProxy = localStorageProxy; | |
| }; | |
| setDebugSetting = function() { | |
| var persistantDebug, queryStringDebug; | |
| persistantDebug = localStorageProxy.getItem('debug') === 'true'; | |
| queryStringDebug = window.location.search.split('debug=true').length > 1; | |
| if (persistantDebug || queryStringDebug) { | |
| console.log('debug enabled'); | |
| return CONFIG.debug = true; | |
| } else { | |
| return console.warn("logs are disabled.\n Activate logs by entering this command and reloading the page:\n localStorage.setItem('debug', true)\n Or activate logs once by adding debug=true as a query parameter"); | |
| } | |
| }; | |
| testIndexedDbSupport = function() { | |
| var indexedDB; | |
| indexedDB = indexedDB || window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB; | |
| return solveIdbSupport(indexedDB).then(function(bool) { | |
| window.supportsIndexedDB = bool; | |
| if (!bool) { | |
| return console.warn('Indexeddb isnt supported'); | |
| } | |
| })["catch"](console.error.bind(console, 'testIndexedDbSupport err')); | |
| }; | |
| solveIdbSupport = function(indexedDB) { | |
| return new Promise(function(resolve, reject) { | |
| var test; | |
| test = indexedDB.open('_indexeddb_support_detection', 1); | |
| test.onsuccess = function() { | |
| return resolve(true); | |
| }; | |
| test.onerror = function() { | |
| window.supportsIndexedDB = false; | |
| return resolve(false); | |
| }; | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/fetch_moment_local", function(exports, require, module) { | |
| var momentLang, pickMomentLang, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = function(lang) { | |
| var validLang; | |
| validLang = pickMomentLang(lang); | |
| if (validLang != null) { | |
| return _.preq.getScript(app.API.moment(lang)).then(function() { | |
| return moment.locale(lang); | |
| })["catch"](_.Error('fetchMomentLocale err')); | |
| } | |
| }; | |
| pickMomentLang = function(lang) { | |
| lang = lang.toLowerCase(); | |
| if (indexOf.call(momentLang, lang) >= 0) { | |
| return lang; | |
| } else { | |
| return null; | |
| } | |
| }; | |
| momentLang = ['af', 'ar', 'ar-ma', 'ar-sa', 'az', 'be', 'bg', 'bn', 'bo', 'br', 'bs', 'ca', 'cs', 'cv', 'cy', 'da', 'de-at', 'de', 'el', 'en-au', 'en-ca', 'en-gb', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fo', 'fr-ca', 'fr', 'gl', 'he', 'hi', 'hr', 'hu', 'hy-am', 'id', 'is', 'it', 'ja', 'ka', 'km', 'ko', 'lb', 'lt', 'lv', 'mk', 'ml', 'mr', 'ms-my', 'my', 'nb', 'ne', 'nl', 'nn', 'pl', 'pt-br', 'pt', 'ro', 'ru', 'sk', 'sl', 'sq', 'sr-cyrl', 'sr', 'sv', 'ta', 'th', 'tl-ph', 'tr', 'tzm', 'tzm-latn', 'uk', 'uz', 'vi', 'zh-cn', 'zh-tw']; | |
| }); | |
| ;require.register("lib/foundation", function(exports, require, module) { | |
| var focusFirstInput, foundationReload, largeModal, modalClose, modalOpen, normalModal, startJoyride; | |
| module.exports.initialize = function(app) { | |
| return app.commands.setHandlers({ | |
| 'foundation:reload': _.debounce(foundationReload, 50), | |
| 'modal:open': modalOpen, | |
| 'modal:close': modalClose, | |
| 'foundation:joyride:start': startJoyride | |
| }); | |
| }; | |
| foundationReload = function(options) { | |
| $(document).foundation(options); | |
| return app.vent.trigger('foundation:reload'); | |
| }; | |
| modalOpen = function(size) { | |
| if (size === 'large') { | |
| largeModal(); | |
| } else { | |
| normalModal(); | |
| } | |
| $('#modal').foundation('reveal', 'open'); | |
| app.execute('foundation:reload'); | |
| return setTimeout(focusFirstInput, 600); | |
| }; | |
| focusFirstInput = function() { | |
| return $('#modal').find('input, textarea').first().focus(); | |
| }; | |
| modalClose = function() { | |
| return $('#modal').foundation('reveal', 'close'); | |
| }; | |
| largeModal = function() { | |
| return $('#modal').addClass('large'); | |
| }; | |
| normalModal = function() { | |
| return $('#modal').removeClass('large'); | |
| }; | |
| startJoyride = function(options) { | |
| return $(document).foundation(options).foundation('joyride', 'start'); | |
| }; | |
| }); | |
| ;require.register("lib/global_helpers", function(exports, require, module) { | |
| module.exports = function(app, _) { | |
| return require('./querystring_helpers')(app, _); | |
| }; | |
| }); | |
| ;require.register("lib/global_libs_extender", function(exports, require, module) { | |
| var error_, triggerChange, | |
| slice = [].slice; | |
| error_ = require('lib/error'); | |
| module.exports = function(_) { | |
| var ArrayHandler, ajax; | |
| sharedLib('global_libs_extender')(); | |
| window.location.root = window.location.protocol + '//' + window.location.host; | |
| Backbone.Model.prototype.idAttribute = '_id'; | |
| ArrayHandler = function(handler) { | |
| var fn; | |
| return fn = function(attr, value) { | |
| var array; | |
| array = this.get(attr) || []; | |
| _.typeArray(array); | |
| array = handler(array, value); | |
| this.set(attr, array); | |
| return triggerChange(this, attr, value); | |
| }; | |
| }; | |
| Backbone.Model.prototype.push = ArrayHandler(function(array, value) { | |
| array.push(value); | |
| return array; | |
| }); | |
| Backbone.Model.prototype.unshift = ArrayHandler(function(array, value) { | |
| array.unshift(value); | |
| return array; | |
| }); | |
| Backbone.Model.prototype.without = ArrayHandler(function(array, value) { | |
| return _.without(array, value); | |
| }); | |
| Backbone.Model.prototype.gets = function() { | |
| var attributes; | |
| attributes = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| if (_.isArray(attributes[0])) { | |
| throw new Error('gets expects attributes as different arguments'); | |
| } | |
| return attributes.map(this.get.bind(this)); | |
| }; | |
| Backbone.Model.prototype.reqGrab = function(request, id, name) { | |
| return app.request(request, id).then(this.grab.bind(this, name))["catch"](_.Error("reqGrab " + request + " " + id + " " + name)); | |
| }; | |
| Backbone.Model.prototype.grab = function(name, model) { | |
| if (model == null) { | |
| throw error_["new"]('grab failed: missing model', arguments); | |
| } | |
| this[name] = model; | |
| return this.triggerGrab(name, model); | |
| }; | |
| Backbone.Model.prototype.triggerGrab = function(name, model) { | |
| this.trigger('grab', name, model); | |
| return this.trigger("grab:" + name, model); | |
| }; | |
| Backbone.Collection.prototype.findOne = function() { | |
| return this.models[0]; | |
| }; | |
| Backbone.Collection.prototype.byId = function(id) { | |
| return this._byId[id]; | |
| }; | |
| Backbone.Collection.prototype.byIds = function(ids) { | |
| return ids.map((function(_this) { | |
| return function(id) { | |
| return _this._byId[id]; | |
| }; | |
| })(this)); | |
| }; | |
| Backbone.Collection.prototype.attributes = function() { | |
| return this.toJSON(); | |
| }; | |
| FilteredCollection.prototype.filterByText = function(text, reset) { | |
| var filterExpr; | |
| if (reset == null) { | |
| reset = true; | |
| } | |
| if (reset) { | |
| this.resetFilters(); | |
| } | |
| filterExpr = new RegExp(text, 'i'); | |
| return this.filterBy('text', function(model) { | |
| if (model.matches != null) { | |
| return model.matches(filterExpr); | |
| } else { | |
| return _.error(model, 'model has no matches method'); | |
| } | |
| }); | |
| }; | |
| Marionette.Region.prototype.Show = function(view, options) { | |
| var docTitle, noCompletion; | |
| if (options == null) { | |
| options = {}; | |
| } | |
| if (_.isString(options)) { | |
| docTitle = options; | |
| } else { | |
| docTitle = options.docTitle, noCompletion = options.noCompletion; | |
| } | |
| if (docTitle != null) { | |
| app.docTitle(_.softDecodeURI(docTitle), noCompletion); | |
| } | |
| return this.show(view, options); | |
| }; | |
| $.fn.once = $.fn.one; | |
| $.postJSON = function(url, data) { | |
| return ajax('POST', url, 'json', data); | |
| }; | |
| $.put = function(url, data) { | |
| return $.ajax({ | |
| url: url, | |
| data: data, | |
| type: 'PUT' | |
| }); | |
| }; | |
| $.putJSON = function(url, data) { | |
| return ajax('PUT', url, 'json', data); | |
| }; | |
| $["delete"] = function(url) { | |
| return ajax('DELETE', url); | |
| }; | |
| $.getXML = function(url) { | |
| return ajax('GET', url, 'xml'); | |
| }; | |
| return ajax = function(verb, url, dataType, data) { | |
| return $.ajax({ | |
| url: url, | |
| type: verb, | |
| data: data, | |
| dataType: dataType | |
| }); | |
| }; | |
| }; | |
| triggerChange = function(model, attr, value) { | |
| model.trigger('change', model, attr, value); | |
| return model.trigger("change:" + attr, model, value); | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/base", function(exports, require, module) { | |
| module.exports = { | |
| initialize: function(appApi) { | |
| var API, fn, name, register, results; | |
| API = _.extend.apply(null, [{}, require('./blocks'), require('./misc'), require('./utils'), require('./partials'), require('./wikidata_claims'), require('./user_content'), require('./images'), require('./input'), require('../shared/handlebars_helpers')(_, appApi)]); | |
| register = function(name, fn) { | |
| return Handlebars.registerHelper(name, fn); | |
| }; | |
| results = []; | |
| for (name in API) { | |
| fn = API[name]; | |
| results.push(register(name, fn.bind(API))); | |
| } | |
| return results; | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/blocks", function(exports, require, module) { | |
| module.exports = { | |
| loggedIn: function(options) { | |
| if (app.user.loggedIn) { | |
| return options.fn(this); | |
| } | |
| }, | |
| notLoggedIn: function(options) { | |
| if (!app.user.loggedIn) { | |
| return options.fn(this); | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/claims_helpers", function(exports, require, module) { | |
| var P, Q, SafeString, escapeExpression, wdP, wdQ; | |
| wdQ = require('modules/general/views/behaviors/templates/wikidata_Q'); | |
| wdP = require('modules/general/views/behaviors/templates/wikidata_P'); | |
| SafeString = Handlebars.SafeString, escapeExpression = Handlebars.escapeExpression; | |
| P = function(id) { | |
| if (/^P[0-9]+$/.test(id)) { | |
| return wdP({ | |
| id: id | |
| }); | |
| } else { | |
| return wdP({ | |
| id: "P" + id | |
| }); | |
| } | |
| }; | |
| Q = function(id, linkify, alt) { | |
| if (id != null) { | |
| if (typeof alt !== 'string') { | |
| alt = ''; | |
| } | |
| app.execute('qlabel:update'); | |
| alt = escapeExpression(alt); | |
| return wdQ({ | |
| id: id, | |
| linkify: linkify, | |
| alt: alt, | |
| label: alt | |
| }); | |
| } | |
| }; | |
| module.exports = { | |
| P: P, | |
| Q: Q, | |
| neutralizeDataObject: function(args) { | |
| var last; | |
| last = args.last(); | |
| if (((last != null ? last.hash : void 0) != null) && (last.data != null)) { | |
| return args.slice(0, -1); | |
| } else { | |
| return args; | |
| } | |
| }, | |
| getQsTemplates: function(valueArray, linkify) { | |
| return _.compact(valueArray).map(function(id) { | |
| return Q(id, linkify).trim(); | |
| }).join(', '); | |
| }, | |
| labelString: function(pid, omitLabel) { | |
| if (omitLabel) { | |
| return ''; | |
| } else { | |
| return P(pid); | |
| } | |
| }, | |
| claimString: function(label, values, inline) { | |
| var text; | |
| text = label + " " + values; | |
| if (!inline) { | |
| text += ' <br>'; | |
| } | |
| return new SafeString(text); | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/format_author", function(exports, require, module) { | |
| var Q, SafeString, escapeExpression, formatString, linkifyAuthorString; | |
| Q = require('./wikidata_claims').Q; | |
| SafeString = Handlebars.SafeString, escapeExpression = Handlebars.escapeExpression; | |
| module.exports = function(linkify, arg) { | |
| var label, type, value; | |
| if (_.isString(arg)) { | |
| return formatString(arg, linkify); | |
| } else { | |
| type = arg.type, value = arg.value, label = arg.label; | |
| switch (type) { | |
| case 'string': | |
| return formatString(value, linkify); | |
| case 'wikidata_id': | |
| return Q(value, linkify, label); | |
| default: | |
| _.warn(arg, 'unknown author data type'); | |
| } | |
| } | |
| }; | |
| formatString = function(str, linkify) { | |
| var t; | |
| t = linkify ? linkifyAuthorString(str) : escapeExpression(str); | |
| return new SafeString(t); | |
| }; | |
| linkifyAuthorString = function(text) { | |
| var q, str; | |
| str = escapeExpression(text); | |
| q = encodeURIComponent(text); | |
| return "<a href='/search?q=" + q + "' class='link searchAuthor'>" + str + "</a>"; | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/images", function(exports, require, module) { | |
| var SafeString, images, imagesList, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| SafeString = Handlebars.SafeString; | |
| exports.icon = function(name, classes) { | |
| var src; | |
| if (_.isString(name)) { | |
| if (indexOf.call(imagesList, name) >= 0) { | |
| src = images[name]; | |
| return new SafeString("<img class='icon' src='" + src + "'>"); | |
| } else { | |
| if (!_.isString(classes)) { | |
| classes = ''; | |
| } | |
| return new SafeString(_.icon(name, classes)); | |
| } | |
| } | |
| }; | |
| images = { | |
| wikipedia: '/public/images/wikipedia-64.png', | |
| wikidata: '/public/images/wikidata.svg', | |
| wikisource: '/public/images/wikisource-64.png', | |
| pouchdb: '/public/images/pouchdb.svg' | |
| }; | |
| imagesList = Object.keys(images); | |
| exports.iconLink = function(name, url, classes) { | |
| var icon; | |
| icon = this.icon.call(null, name, classes); | |
| return this.link.call(this, icon, url, ''); | |
| }; | |
| exports.iconLinkText = function(name, url, text, classes) { | |
| var icon; | |
| icon = this.icon.call(null, name, classes); | |
| return this.link.call(this, icon + "<span>" + text + "</span>", url, ''); | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/input", function(exports, require, module) { | |
| var SafeString, applyOptions, behavior, check, input, textarea; | |
| behavior = function(name) { | |
| return require("modules/general/views/behaviors/templates/" + name); | |
| }; | |
| check = behavior('success_check'); | |
| input = behavior('input'); | |
| textarea = behavior('textarea'); | |
| SafeString = Handlebars.SafeString; | |
| module.exports = { | |
| input: function(data, options) { | |
| var base, button, field, icon, name, ref; | |
| if (data == null) { | |
| _.log(arguments, 'input arguments @err'); | |
| throw new Error('no data'); | |
| } | |
| field = { | |
| type: 'text', | |
| dotdotdot: '...' | |
| }; | |
| button = { | |
| classes: 'success postfix' | |
| }; | |
| name = data.nameBase; | |
| if (name != null) { | |
| field.id = name + 'Field'; | |
| field.name = name; | |
| button.id = name + 'Button'; | |
| button.text = name; | |
| } | |
| if (((ref = data.button) != null ? ref.icon : void 0) != null) { | |
| icon = _.icon(data.button.icon); | |
| if (data.button.text != null) { | |
| data.button.text = icon + "<span>" + data.button.text + "</span>"; | |
| } else { | |
| data.button.text = icon; | |
| } | |
| } | |
| data = { | |
| id: name + "Group", | |
| field: _.extend(field, data.field), | |
| button: _.extend(button, data.button) | |
| }; | |
| if ((base = data.field).placeholder == null) { | |
| base.placeholder = _.i18n(name); | |
| } | |
| if (data.special) { | |
| data.special = 'autocorrect="off" autocapitalize="off"'; | |
| } | |
| return applyOptions(input(data), options); | |
| }, | |
| disableAuto: function() { | |
| return 'autocorrect="off" autocapitalize="off"'; | |
| }, | |
| textarea: function(data, options) { | |
| if (data == null) { | |
| _.log(arguments, 'textarea arguments err'); | |
| throw new Error('no data'); | |
| } | |
| return applyOptions(textarea(data), options); | |
| } | |
| }; | |
| applyOptions = function(html, options) { | |
| html = options === 'check' ? check(html) : html; | |
| return new SafeString(html); | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/linkify", function(exports, require, module) { | |
| module.exports = function(text, url, classes) { | |
| if (classes == null) { | |
| classes = 'link'; | |
| } | |
| if (typeof classes !== 'string') { | |
| classes = ''; | |
| } | |
| return "<a href=\"" + url + "\" class='" + classes + "' target='_blank'>" + text + "</a>"; | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/misc", function(exports, require, module) { | |
| var SafeString, | |
| slice = [].slice; | |
| SafeString = Handlebars.SafeString; | |
| module.exports = { | |
| i18n: function() { | |
| var args, context, data, firstArg, i, key; | |
| key = arguments[0], args = 3 <= arguments.length ? slice.call(arguments, 1, i = arguments.length - 1) : (i = 1, []), data = arguments[i++]; | |
| if (key == null) { | |
| return ''; | |
| } | |
| firstArg = args[0]; | |
| if (_.isObject(firstArg) || _.isNumber(firstArg)) { | |
| context = firstArg; | |
| } else if (args.length % 2 === 0) { | |
| context = _.objectifyPairs(args); | |
| } else { | |
| context = null; | |
| } | |
| return _.i18n(key, context); | |
| }, | |
| I18n: function() { | |
| var args; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| return _.capitaliseFirstLetter(this.i18n.apply(this, args)); | |
| }, | |
| link: function(text, url, classes) { | |
| return new SafeString(this.linkify(text, url, classes)); | |
| }, | |
| i18nLink: function(text, url) { | |
| text = _.i18n(text); | |
| return this.link(text, url); | |
| }, | |
| limit: function(text, limit) { | |
| var t; | |
| if (text == null) { | |
| return ''; | |
| } | |
| t = text.slice(0, +limit + 1 || 9e9); | |
| if (text.length > limit) { | |
| t += '[...]'; | |
| } | |
| return new SafeString(t); | |
| }, | |
| ifvalue: function(attr, value) { | |
| if (value != null) { | |
| return attr + "=" + value; | |
| } else { | |
| } | |
| }, | |
| inlineOptions: function(options) { | |
| var k, str, v; | |
| str = ''; | |
| for (k in options) { | |
| v = options[k]; | |
| str += k + ":" + v + "; "; | |
| } | |
| return str; | |
| }, | |
| linkify: require('./linkify'), | |
| qrcode: function(url, size) { | |
| return _.qrcode(url, size); | |
| }, | |
| debug: function() { | |
| _.log(arguments, 'hb debug arguments'); | |
| return _.log(this, 'hb debug this'); | |
| }, | |
| timeFromNow: function(time) { | |
| return moment(time).fromNow(); | |
| }, | |
| dateYear: function(date) { | |
| return date.split('-')[0]; | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/partials", function(exports, require, module) { | |
| var SafeString, behavior, check, tip; | |
| behavior = function(name) { | |
| return require("modules/general/views/behaviors/templates/" + name); | |
| }; | |
| check = behavior('success_check'); | |
| tip = behavior('tip'); | |
| SafeString = Handlebars.SafeString; | |
| module.exports = { | |
| partial: function(name, context, option) { | |
| var file, module, partial, parts, path, ref, subfolder, template; | |
| parts = name.split(':'); | |
| switch (parts.length) { | |
| case 3: | |
| module = parts[0], subfolder = parts[1], file = parts[2]; | |
| break; | |
| case 2: | |
| module = parts[0], file = parts[1]; | |
| break; | |
| case 1: | |
| ref = ['general', name], module = ref[0], file = ref[1]; | |
| } | |
| if (subfolder != null) { | |
| path = "modules/" + module + "/views/" + subfolder + "/templates/" + file; | |
| } else { | |
| path = "modules/" + module + "/views/templates/" + file; | |
| } | |
| template = require(path); | |
| partial = new SafeString(template(context)); | |
| switch (option) { | |
| case 'check': | |
| partial = new SafeString(check(partial)); | |
| } | |
| return partial; | |
| }, | |
| tip: function(text, position) { | |
| var context; | |
| context = { | |
| text: _.i18n(text), | |
| position: position || 'rigth' | |
| }; | |
| return new SafeString(tip(context)); | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/platforms", function(exports, require, module) { | |
| var gutenbergBase, images_; | |
| images_ = require('./images'); | |
| module.exports = { | |
| P1938: { | |
| label: function() { | |
| return images_.icon('download'); | |
| }, | |
| text: function(id) { | |
| return _.i18n("ebooks on gutenberg.org"); | |
| }, | |
| url: function(id) { | |
| return (gutenbergBase()) + "ebooks/author/" + id; | |
| } | |
| }, | |
| P2002: { | |
| label: function() { | |
| return images_.icon('twitter'); | |
| }, | |
| text: function(username) { | |
| return "@" + username; | |
| }, | |
| url: function(username) { | |
| return "https://twitter.com/" + username; | |
| } | |
| }, | |
| P2003: { | |
| label: function() { | |
| return images_.icon('instagram'); | |
| }, | |
| text: function(username) { | |
| return username; | |
| }, | |
| url: function(username) { | |
| return "https://instagram.com/" + username; | |
| } | |
| }, | |
| P2013: { | |
| label: function() { | |
| return images_.icon('facebook'); | |
| }, | |
| text: function(facebookId) { | |
| return facebookId; | |
| }, | |
| url: function(facebookId) { | |
| return "https://facebook.com/" + facebookId; | |
| } | |
| }, | |
| P2034: { | |
| label: function() { | |
| return images_.icon('download'); | |
| }, | |
| text: function(id) { | |
| return _.i18n('download ebook'); | |
| }, | |
| url: function(id) { | |
| return (gutenbergBase()) + "ebooks/" + id; | |
| } | |
| } | |
| }; | |
| gutenbergBase = function() { | |
| var base; | |
| base = _.smallScreen() ? 'http://m.' : 'https://www.'; | |
| return base + "gutenberg.org/"; | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/user_content", function(exports, require, module) { | |
| var SafeString, escapeExpression, link, protocolText; | |
| SafeString = Handlebars.SafeString, escapeExpression = Handlebars.escapeExpression; | |
| link = /(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]+)/gim; | |
| protocolText = '<a href="$1" class="content-link" target="_blank" rel="nofollow">$1</a>'; | |
| module.exports = { | |
| userContent: function(text) { | |
| if (text != null) { | |
| text = escapeExpression(text); | |
| text = text.replace(/\n/g, '<br>').replace(link, protocolText); | |
| return new SafeString(text); | |
| } else { | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/utils", function(exports, require, module) { | |
| var formatAuthor; | |
| formatAuthor = require('./format_author'); | |
| module.exports = { | |
| join: function(array, separator) { | |
| if (array == null) { | |
| return ''; | |
| } | |
| if (!_.isString(separator)) { | |
| separator = ', '; | |
| } | |
| return array.join(separator); | |
| }, | |
| log: function(args, data) { | |
| return _.log.apply(_, args); | |
| }, | |
| "default": function(text, def) { | |
| return text || def; | |
| }, | |
| joinAuthors: function(array, linkify) { | |
| if (array == null) { | |
| return ''; | |
| } | |
| if (!_.isBoolean(linkify)) { | |
| linkify = true; | |
| } | |
| return this.join(array.map(formatAuthor.bind(null, linkify))); | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/handlebars_helpers/wikidata_claims", function(exports, require, module) { | |
| var P, Q, SafeString, claimString, getQsTemplates, images_, labelString, linkify_, neutralizeDataObject, platforms_, ref, wd_, | |
| slice = [].slice; | |
| SafeString = Handlebars.SafeString; | |
| wd_ = require('lib/wikidata'); | |
| linkify_ = require('./linkify'); | |
| images_ = require('./images'); | |
| platforms_ = require('./platforms'); | |
| ref = require('./claims_helpers'), P = ref.P, Q = ref.Q, neutralizeDataObject = ref.neutralizeDataObject, getQsTemplates = ref.getQsTemplates, labelString = ref.labelString, claimString = ref.claimString; | |
| module.exports = { | |
| P: P, | |
| Q: Q, | |
| claim: function() { | |
| var args, claims, inline, label, linkify, omitLabel, pid, ref1, ref2, values; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| ref1 = neutralizeDataObject(args), claims = ref1[0], pid = ref1[1], linkify = ref1[2], omitLabel = ref1[3], inline = ref1[4]; | |
| if ((claims != null ? (ref2 = claims[pid]) != null ? ref2[0] : void 0 : void 0) != null) { | |
| label = labelString(pid, omitLabel); | |
| values = getQsTemplates(claims[pid], linkify); | |
| return claimString(label, values, inline); | |
| } | |
| }, | |
| timeClaim: function() { | |
| var args, claims, format, inline, label, omitLabel, pid, ref1, ref2, values; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| ref1 = neutralizeDataObject(args), claims = ref1[0], pid = ref1[1], format = ref1[2], omitLabel = ref1[3], inline = ref1[4]; | |
| format || (format = 'year'); | |
| if ((claims != null ? (ref2 = claims[pid]) != null ? ref2[0] : void 0 : void 0) != null) { | |
| values = claims[pid].map(function(unixTime) { | |
| var time; | |
| time = new Date(unixTime); | |
| switch (format) { | |
| case 'year': | |
| return time.getUTCFullYear(); | |
| } | |
| }); | |
| label = labelString(pid, omitLabel); | |
| values = _.uniq(values).join(" " + (_.i18n('or')) + " "); | |
| return claimString(label, values, inline); | |
| } | |
| }, | |
| imageClaim: function(claims, pid, omitLabel, inline, data) { | |
| var file, ref1, src; | |
| if ((claims != null ? (ref1 = claims[pid]) != null ? ref1[0] : void 0 : void 0) != null) { | |
| file = claims[pid][0]; | |
| src = wd_.wmCommonsSmallThumb(file, 200); | |
| return new SafeString("<img src='" + src + "'>"); | |
| } | |
| }, | |
| stringClaim: function() { | |
| var args, claims, inline, label, linkify, omitLabel, pid, ref1, ref2, ref3, values; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| ref1 = neutralizeDataObject(args), claims = ref1[0], pid = ref1[1], linkify = ref1[2], omitLabel = ref1[3], inline = ref1[4]; | |
| if ((claims != null ? (ref2 = claims[pid]) != null ? ref2[0] : void 0 : void 0) != null) { | |
| label = labelString(pid, omitLabel); | |
| values = (ref3 = claims[pid]) != null ? ref3.join(', ') : void 0; | |
| return claimString(label, values, inline); | |
| } | |
| }, | |
| urlClaim: function() { | |
| var args, claims, cleanedUrl, firstUrl, label, pid, ref1, ref2, values; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| ref1 = neutralizeDataObject(args), claims = ref1[0], pid = ref1[1]; | |
| firstUrl = claims != null ? (ref2 = claims[pid]) != null ? ref2[0] : void 0 : void 0; | |
| if (firstUrl != null) { | |
| label = images_.icon('link'); | |
| cleanedUrl = _.dropProtocol(firstUrl); | |
| values = linkify_(cleanedUrl, firstUrl, 'link website'); | |
| return claimString(label, values); | |
| } | |
| }, | |
| platformClaim: function() { | |
| var args, claims, firstUsername, label, pid, platform, ref1, ref2, values; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| ref1 = neutralizeDataObject(args), claims = ref1[0], pid = ref1[1]; | |
| firstUsername = claims != null ? (ref2 = claims[pid]) != null ? ref2[0] : void 0 : void 0; | |
| if (firstUsername != null) { | |
| platform = platforms_[pid]; | |
| label = platform.label(); | |
| values = linkify_(platform.text(firstUsername), platform.url(firstUsername), 'link social-network'); | |
| return claimString(label, values); | |
| } | |
| }, | |
| wdRemoteHref: function(id) { | |
| return "https://www.wikidata.org/entity/" + id; | |
| }, | |
| wdLocalHref: function(id, label) { | |
| return app.request('get:entity:local:href', 'wd', id, label); | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/i18n", function(exports, require, module) { | |
| var doneChanging, fetchMomentLocale, qlabel, requestI18nFile, setLanguage, updatePolyglot, updateQlabel; | |
| fetchMomentLocale = require('./fetch_moment_local'); | |
| qlabel = require('lib/qlabel/qlabel'); | |
| module.exports = { | |
| initialize: function(app) { | |
| var missingKey; | |
| app.reqres.setHandlers({ | |
| 'i18n:set': function() { | |
| return _.preq.start.then(setLanguage); | |
| }, | |
| 'i18n:current': function() { | |
| return app.user.lang; | |
| } | |
| }); | |
| if (window.env === 'dev') { | |
| missingKey = require('./i18n_missing_key'); | |
| } else { | |
| missingKey = _.noop; | |
| } | |
| app.commands.setHandlers({ | |
| 'i18n:missing:key': missingKey, | |
| 'qlabel:update': updateQlabel, | |
| 'qlabel:refresh': qlabel.refreshData | |
| }); | |
| return app.vent.on('i18n:set', updateQlabel); | |
| } | |
| }; | |
| setLanguage = function() { | |
| var changeNeeded, lang, polyglot; | |
| lang = app.user.lang; | |
| polyglot = app.polyglot || (app.polyglot = new Polyglot); | |
| app.vent.trigger('i18n:set', lang); | |
| changeNeeded = _.isEmpty(polyglot.phrases) || (lang !== polyglot.currentLocale); | |
| if (!changeNeeded) { | |
| return; | |
| } | |
| if (lang !== polyglot.changingTo) { | |
| return requestI18nFile(polyglot, lang); | |
| } else { | |
| return _.warn('i18n: language changing, can not be re-set yet'); | |
| } | |
| }; | |
| requestI18nFile = function(polyglot, lang) { | |
| polyglot.changingTo = lang; | |
| fetchMomentLocale(lang); | |
| return _.preq.get(app.API.i18n(lang)).then(updatePolyglot.bind(null, polyglot, lang))["catch"](_.Error("i18n: failed to get the i18n file for " + lang))["finally"](doneChanging.bind(null, polyglot)); | |
| }; | |
| updatePolyglot = function(polyglot, lang, res) { | |
| polyglot.replace(res); | |
| polyglot.locale(lang); | |
| return app.vent.trigger('i18n:reset'); | |
| }; | |
| doneChanging = function(polyglot) { | |
| return polyglot.changingTo = null; | |
| }; | |
| updateQlabel = function() { | |
| var lang; | |
| lang = app.user.lang; | |
| return qlabel.update(lang); | |
| }; | |
| }); | |
| ;require.register("lib/i18n_missing_key", function(exports, require, module) { | |
| var lazyMissingKey, missingKeys, sendMissingKeys; | |
| missingKeys = []; | |
| module.exports = function(key) { | |
| if (key != null) { | |
| missingKeys.push(key); | |
| return lazyMissingKey(); | |
| } | |
| }; | |
| sendMissingKeys = function() { | |
| if ((missingKeys != null ? missingKeys.length : void 0) > 0) { | |
| return _.preq.post('/log/i18n', { | |
| missingKeys: _.uniq(missingKeys) | |
| }).then(function(res) { | |
| _.log(missingKeys, 'i18n:missing added'); | |
| return missingKeys = []; | |
| })["catch"](_.Error('i18n:missing keys failed to be added')); | |
| } | |
| }; | |
| lazyMissingKey = _.debounce(sendMissingKeys, 500); | |
| }); | |
| ;require.register("lib/images", function(exports, require, module) { | |
| var error_, getResizedDimensions, handlers, saveDimensions; | |
| error_ = require('lib/error'); | |
| handlers = { | |
| addDataUrlToArray: function(file, array, event) { | |
| return resize.photo(file, 600, 'dataURL', function(data) { | |
| array.unshift(data); | |
| if ((array.trigger != null) && (event != null)) { | |
| return array.trigger(event); | |
| } | |
| }); | |
| }, | |
| getFileDataUrl: function(file) { | |
| var reader; | |
| reader = new FileReader(); | |
| return new Promise(function(resolve, reject) { | |
| reader.onerror = reject; | |
| reader.onload = function(readerEvent) { | |
| return resolve(readerEvent.target.result); | |
| }; | |
| return reader.readAsDataURL(file); | |
| }); | |
| }, | |
| getUrlDataUrl: function(url) { | |
| if (/^http/.test(url)) { | |
| url = app.API.proxy(url); | |
| } | |
| return new Promise(function(resolve, reject) { | |
| return window.toDataURL(url, { | |
| callback: function(err, res) { | |
| if (err != null) { | |
| return reject(err); | |
| } else { | |
| return resolve(res); | |
| } | |
| } | |
| }); | |
| }); | |
| }, | |
| getElementDataUrl: function($el) { | |
| return $el.toDataURL(); | |
| }, | |
| resizeDataUrl: function(dataURL, maxSize, outputQuality) { | |
| if (outputQuality == null) { | |
| outputQuality = 1; | |
| } | |
| return new Promise(function(resolve, reject) { | |
| var data, image; | |
| data = { | |
| original: {}, | |
| resized: {} | |
| }; | |
| image = new Image(); | |
| image.onload = function(imageEvent) { | |
| var canvas, height, ref, width; | |
| canvas = document.createElement('canvas'); | |
| width = image.width, height = image.height; | |
| saveDimensions(data, 'original', width, height); | |
| ref = getResizedDimensions(width, height, maxSize), width = ref[0], height = ref[1]; | |
| saveDimensions(data, 'resized', width, height); | |
| canvas.width = width; | |
| canvas.height = height; | |
| canvas.getContext('2d').drawImage(image, 0, 0, width, height); | |
| data.dataUrl = canvas.toDataURL('image/jpeg', outputQuality); | |
| return resolve(data); | |
| }; | |
| image.onerror = reject; | |
| return image.src = dataURL; | |
| }); | |
| }, | |
| canvasToBlob: function(canvas) { | |
| if (_.isCanvas(canvas)) { | |
| return canvas.toBlob(); | |
| } else { | |
| throw new Error('expected a canvas'); | |
| } | |
| }, | |
| dataUrlToBlob: function(data) { | |
| if (_.isDataUrl(data)) { | |
| return window.dataURLtoBlob(data); | |
| } else { | |
| throw new Error('expected a dataURL'); | |
| } | |
| }, | |
| upload: function(blobsData) { | |
| var blob, blobData, formData, i, id, j, len; | |
| blobsData = _.forceArray(blobsData); | |
| formData = new FormData(); | |
| i = 0; | |
| for (j = 0, len = blobsData.length; j < len; j++) { | |
| blobData = blobsData[j]; | |
| blob = blobData.blob, id = blobData.id; | |
| id || (id = "file-" + (++i)); | |
| formData.append(id, blob); | |
| } | |
| return new Promise(function(resolve, reject) { | |
| var request; | |
| request = new XMLHttpRequest(); | |
| request.onreadystatechange = function() { | |
| var status, statusText; | |
| if (request.readyState === 4) { | |
| status = request.status, statusText = request.statusText; | |
| if (/^2/.test(request.status.toString())) { | |
| return resolve(request.response); | |
| } else { | |
| return reject(error_["new"](statusText, status)); | |
| } | |
| } | |
| }; | |
| request.onerror = reject; | |
| request.ontimeout = reject; | |
| request.open('POST', app.API.upload.post); | |
| request.responseType = 'json'; | |
| return request.send(formData); | |
| }); | |
| }, | |
| del: function(imageUrlToDelete) { | |
| _.inspect(imageUrlToDelete, 'imageUrlToDelete'); | |
| return _.preq.post(app.API.upload.del, { | |
| urls: imageUrlToDelete | |
| }).then(_.Log('image del res'))["catch"](_.Error('image del err')); | |
| }, | |
| getNonResizedUrl: function(url) { | |
| return url.replace(/\/img\/\d+x\d+\//, '/img/'); | |
| } | |
| }; | |
| getResizedDimensions = function(width, height, maxSize) { | |
| if (width > height) { | |
| if (width > maxSize) { | |
| height *= maxSize / width; | |
| width = maxSize; | |
| } | |
| } else { | |
| if (height > maxSize) { | |
| width *= maxSize / height; | |
| height = maxSize; | |
| } | |
| } | |
| return [width, height]; | |
| }; | |
| saveDimensions = function(data, attribute, width, height) { | |
| data[attribute].width = width; | |
| return data[attribute].height = height; | |
| }; | |
| module.exports = handlers; | |
| }); | |
| ;require.register("lib/jquery-jk", function(exports, require, module) { | |
| module.exports.initialize = function($) { | |
| var attempt, focusOn, focused, nextKey, prevKey, selectKey, selectOn, selected; | |
| focused = function() { | |
| return this.find('.focus'); | |
| }; | |
| focusOn = function(dir) { | |
| var focusedNew, focusedOld; | |
| if (!this.focused().length) { | |
| return this.find('*:first').addClass('focus'); | |
| } | |
| focusedOld = this.focused(); | |
| focusedNew = focusedOld[dir](); | |
| if (focusedNew.size()) { | |
| focusedOld.trigger('focus:lost').removeClass('focus'); | |
| return focusedNew.trigger('focus:added').addClass('focus'); | |
| } else { | |
| return this.trigger('paginate:' + dir); | |
| } | |
| }; | |
| selected = function() { | |
| return this.find('.selected'); | |
| }; | |
| selectOn = function() { | |
| focused = this.focused(); | |
| if (focused.toggleClass('selected').hasClass('selected')) { | |
| return focused.trigger('selection:added'); | |
| } else { | |
| return focused.trigger('selection:lost'); | |
| } | |
| }; | |
| nextKey = function() { | |
| return $.jk.NEXT.charCodeAt(); | |
| }; | |
| prevKey = function() { | |
| return $.jk.PREV.charCodeAt(); | |
| }; | |
| selectKey = function() { | |
| return $.jk.SELECT.charCodeAt(); | |
| }; | |
| attempt = function(event) { | |
| if (!event.which) { | |
| return; | |
| } | |
| if ($(event.target).is(':input')) { | |
| return; | |
| } | |
| if (event.which === nextKey()) { | |
| $.jk.focusNext(); | |
| $.jk.scrollToFocused(); | |
| } | |
| if (event.which === prevKey()) { | |
| $.jk.focusPrev(); | |
| $.jk.scrollToFocused(); | |
| } | |
| if (event.which === selectKey()) { | |
| return $.jk.select(); | |
| } | |
| }; | |
| $.jk = { | |
| PREV: 'k', | |
| NEXT: 'j', | |
| SELECT: 'x', | |
| focusNext: function() { | |
| return $('.jk').focusOn('next'); | |
| }, | |
| focusPrev: function() { | |
| return $('.jk').focusOn('prev'); | |
| }, | |
| select: function() { | |
| return $('.jk').selectOn(); | |
| }, | |
| scrollToFocused: function() { | |
| var $focus, targetedHeight; | |
| $focus = $('.focus'); | |
| if ($focus.length > 0) { | |
| targetedHeight = $focus.offset().top - 50; | |
| return $('html, body').animate({ | |
| scrollTop: targetedHeight | |
| }, 100); | |
| } | |
| } | |
| }; | |
| $.fn.focused = focused; | |
| $.fn.focusOn = focusOn; | |
| $.fn.selected = selected; | |
| $.fn.selectOn = selectOn; | |
| return $(document).ready(function() { | |
| return $(document).bind('keypress', attempt); | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/loggers", function(exports, require, module) { | |
| var slice = [].slice; | |
| module.exports = function(_, csle) { | |
| var error, log, loggers, partialLoggers, proxied, spy, warn; | |
| csle || (csle = window.console); | |
| log = function(obj, label, stack) { | |
| var ref; | |
| if (_.isString(obj)) { | |
| if (label != null) { | |
| obj.logIt(label); | |
| } else { | |
| csle.log(obj); | |
| } | |
| } else { | |
| if (label != null) { | |
| csle.log("===== " + label + " ====="); | |
| } | |
| csle.log(obj); | |
| if (label != null) { | |
| csle.log("-----"); | |
| } | |
| } | |
| if (stack) { | |
| csle.log(label + " stack", (ref = new Error('fake error').stack) != null ? ref.split("\n") : void 0); | |
| } | |
| return obj; | |
| }; | |
| error = function(err, label) { | |
| var newErr, ref, ref1, report; | |
| if ((err != null ? err.status : void 0) != null) { | |
| if ((err != null ? err.responseText : void 0) != null) { | |
| label = err.responseText + " (" + label + ")"; | |
| } | |
| switch (err.status) { | |
| case 401: | |
| return csle.warn('401', label); | |
| case 404: | |
| return csle.warn('404', label); | |
| } | |
| } | |
| if ((err != null ? err.stack : void 0) == null) { | |
| label || (label = 'empty error'); | |
| newErr = new Error(label); | |
| report = [err, newErr.message, (ref = newErr.stack) != null ? ref.split('\n') : void 0]; | |
| } else { | |
| report = [err.message || err, (ref1 = err.stack) != null ? ref1.split('\n') : void 0]; | |
| } | |
| if ((err != null ? err.context : void 0) != null) { | |
| report.push(err.context); | |
| } | |
| window.reportErr({ | |
| error: report | |
| }); | |
| return csle.error.apply(csle, report); | |
| }; | |
| warn = function() { | |
| var args; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| csle.warn('/!\\'); | |
| loggers.log.apply(null, args); | |
| }; | |
| spy = function(res, label) { | |
| console.log(label); | |
| return res; | |
| }; | |
| partialLoggers = { | |
| Log: function(label) { | |
| return _.partial(log, _, label); | |
| }, | |
| Error: function(label) { | |
| return _.partial(error, _, label); | |
| }, | |
| Warn: function(label) { | |
| return _.partial(warn, _, label); | |
| }, | |
| Spy: function(label) { | |
| return _.partial(spy, _, label); | |
| }, | |
| ErrorRethrow: function(label) { | |
| var fn; | |
| return fn = function(err) { | |
| error(err, label); | |
| throw err; | |
| }; | |
| } | |
| }; | |
| loggers = { | |
| log: log, | |
| error: error, | |
| warn: warn, | |
| spy: spy, | |
| logAllEvents: function(obj, prefix) { | |
| if (prefix == null) { | |
| prefix = 'logAllEvents'; | |
| } | |
| return obj.on('all', function(event) { | |
| csle.log("[" + prefix + ":" + event + "]"); | |
| csle.log(arguments); | |
| return csle.log('---'); | |
| }); | |
| }, | |
| logArgs: function(args) { | |
| csle.log("[arguments]"); | |
| csle.log(args); | |
| return csle.log('---'); | |
| }, | |
| logServer: function(obj, label) { | |
| var report; | |
| report = { | |
| obj: obj, | |
| label: label | |
| }; | |
| $.post(app.API.test, report); | |
| return obj; | |
| } | |
| }; | |
| String.prototype.logIt = function(label) { | |
| csle.log("[" + label + "] " + (this.toString())); | |
| return this.toString(); | |
| }; | |
| proxied = { | |
| trace: csle.trace.bind(csle), | |
| time: csle.time.bind(csle), | |
| timeEnd: csle.timeEnd.bind(csle) | |
| }; | |
| return _.extend(loggers, partialLoggers, proxied); | |
| }; | |
| }); | |
| ;require.register("lib/mobile_check", function(exports, require, module) { | |
| var mobileChecker, test; | |
| test = function(agent) { | |
| return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge|maemo|midp|mmp|mobile.+firefox|netfront|operam(ob|in)i|palm(os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windowsce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|awa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r|s)|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(i|ip)|hs\-c|ht(c(\-||_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(|\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(|\/)|klon|kpt|kwc\-|kyo(c|k)|le(no|xi)|lg(g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-||o|v)|zz)|mt(50|p1|v)|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v)|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|)|webc|whit|wi(g|nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(agent.substr(0, 4)); | |
| }; | |
| mobileChecker = function() { | |
| var agent; | |
| agent = navigator.userAgent || navigator.vendor || window.opera; | |
| if (test(agent)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }; | |
| module.exports = mobileChecker(); | |
| }); | |
| ;require.register("lib/model_update", function(exports, require, module) { | |
| var Updater, error_, rollbackUpdate; | |
| error_ = require('lib/error'); | |
| Updater = function(fixedOptions) { | |
| var action, endpoint, modelIdLabel, uniqueModel, updater; | |
| endpoint = fixedOptions.endpoint, action = fixedOptions.action, uniqueModel = fixedOptions.uniqueModel, modelIdLabel = fixedOptions.modelIdLabel; | |
| return updater = function(options) { | |
| var attribute, body, bothInexistant, defaultPreviousValue, model, previousValue, promise, selector, value; | |
| model = options.model, attribute = options.attribute, value = options.value, defaultPreviousValue = options.defaultPreviousValue, selector = options.selector; | |
| model || (model = uniqueModel); | |
| previousValue = model.get(attribute); | |
| if (previousValue == null) { | |
| previousValue = defaultPreviousValue; | |
| } | |
| bothInexistant = (value == null) && (previousValue == null); | |
| if (bothInexistant || _.isEqual(value, previousValue)) { | |
| _.log(options, 'the model is already up-to-date'); | |
| promise = _.preq.resolved; | |
| } else { | |
| model.set(attribute, value); | |
| options.previousValue = previousValue; | |
| options.model = model; | |
| body = { | |
| attribute: attribute, | |
| value: value | |
| }; | |
| if (action != null) { | |
| body.action = action; | |
| } | |
| if (modelIdLabel != null) { | |
| body[modelIdLabel] = model.id; | |
| } | |
| promise = _.preq.put(endpoint, body)["catch"](rollbackUpdate.bind(null, options)); | |
| } | |
| if (selector != null) { | |
| app.request('waitForCheck', { | |
| promise: promise, | |
| selector: selector | |
| }); | |
| } | |
| return promise; | |
| }; | |
| }; | |
| rollbackUpdate = function(options, err) { | |
| var attribute, model, previousValue, selector; | |
| model = options.model, attribute = options.attribute, previousValue = options.previousValue, selector = options.selector; | |
| if (previousValue != null) { | |
| _.warn(previousValue, "reversing " + attribute + " update"); | |
| model.set(attribute, previousValue); | |
| } else { | |
| _.warn(previousValue, "couldn't reverse update: previousValue not found"); | |
| } | |
| err = selector != null ? error_.complete(selector, err) : err; | |
| throw err; | |
| }; | |
| module.exports = { | |
| Updater: Updater | |
| }; | |
| }); | |
| ;require.register("lib/noop_console", function(exports, require, module) { | |
| var noop; | |
| noop = function() {}; | |
| module.exports = { | |
| log: noop, | |
| warn: noop, | |
| error: noop, | |
| info: noop, | |
| trace: noop, | |
| time: noop, | |
| timeEnd: noop | |
| }; | |
| }); | |
| ;require.register("lib/piwik", function(exports, require, module) { | |
| var _paq, env, trackerUrl, | |
| slice = [].slice; | |
| window._paq || (window._paq = []); | |
| _paq = window._paq, env = window.env; | |
| trackerUrl = require('lib/urls').tracker; | |
| module.exports = function() { | |
| var friend, group, invitation, item, login, setUserId, signup, trackEvent, trackPageView, tracker, transaction; | |
| if (env === 'dev') { | |
| trackerUrl = app.API.test; | |
| } | |
| _paq.push(['enableLinkTracking']); | |
| _paq.push(['setTrackerUrl', trackerUrl]); | |
| _paq.push(['setSiteId', 11]); | |
| tracker = Piwik.getAsyncTracker(); | |
| setUserId = function(id) { | |
| if (_.isUserId(id)) { | |
| return _paq.push(['setUserId', id]); | |
| } | |
| }; | |
| trackPageView = function(title) { | |
| tracker.setCustomUrl(location.href); | |
| return _paq.push(['trackPageView', title]); | |
| }; | |
| trackEvent = function() { | |
| var args, ev; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| args = _.compact(args); | |
| ev = ['trackEvent'].concat(args); | |
| return _paq.push(ev); | |
| }; | |
| signup = function(type) { | |
| return trackEvent('auth', 'signup', type); | |
| }; | |
| login = function(type) { | |
| return trackEvent('auth', 'login', type); | |
| }; | |
| transaction = function(action, userStatus) { | |
| return trackEvent('transaction', "transaction:" + action, userStatus); | |
| }; | |
| friend = function(action) { | |
| return trackEvent('friend', "friend:" + action); | |
| }; | |
| invitation = function(action, count) { | |
| return trackEvent('invitation', "invitation:" + action, 'count', count); | |
| }; | |
| group = function(action) { | |
| return trackEvent('group', "group:" + action); | |
| }; | |
| item = function(action, listing, transaction) { | |
| return trackEvent('item', "item:" + action, listing, transaction); | |
| }; | |
| return app.commands.setHandlers({ | |
| 'track:user:id': setUserId, | |
| 'track:page:view': _.debounce(trackPageView, 300), | |
| 'track:auth:signup': signup, | |
| 'track:auth:login': login, | |
| 'track:transaction': transaction, | |
| 'track:friend': friend, | |
| 'track:invitation': invitation, | |
| 'track:group': group, | |
| 'track:item': item | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/poster", function(exports, require, module) { | |
| module.exports = { | |
| UpdateModelIdRev: function(model) { | |
| var updater; | |
| return updater = function(res) { | |
| var _id, _rev, id, rev; | |
| _id = res._id, _rev = res._rev, id = res.id, rev = res.rev; | |
| id || (id = _id); | |
| rev || (rev = _rev); | |
| return model.set({ | |
| _id: id, | |
| _rev: rev | |
| }); | |
| }; | |
| }, | |
| Rewind: function(model, collection) { | |
| var rewinder; | |
| return rewinder = function(err) { | |
| collection.remove(model); | |
| throw err; | |
| }; | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/preq", function(exports, require, module) { | |
| var preq, proxiedUrl, rewriteError, wrap; | |
| Promise.prototype.fail = Promise.prototype.caught; | |
| Promise.prototype.always = Promise.prototype["finally"]; | |
| Promise.onPossiblyUnhandledRejection(function(err) { | |
| var clue, label, ref, report, stack; | |
| label = "[PossiblyUnhandledError] " + err.name + ": " + err.message + " (" + (typeof err.message) + ")"; | |
| stack = err != null ? (ref = err.stack) != null ? ref.split('\n') : void 0 : void 0; | |
| report = { | |
| label: label, | |
| error: err, | |
| stack: stack | |
| }; | |
| if (err.message === "[object Object]") { | |
| report.clue = clue = "this is probably an error from a jQuery promise wrapped into a Bluebird one"; | |
| } | |
| window.reportErr(report); | |
| return console.error(label, stack, clue); | |
| }); | |
| preq = sharedLib('promises')(Promise); | |
| module.exports = _.extend(preq, { | |
| get: function(url, options) { | |
| if (proxiedUrl(url)) { | |
| url = app.API.proxy(url); | |
| } | |
| return wrap($.get(url), url); | |
| }, | |
| post: function(url, body) { | |
| return wrap($.post(url, body), url); | |
| }, | |
| put: function(url, body) { | |
| return wrap($.put(url, body), url); | |
| }, | |
| "delete": function(url) { | |
| return wrap($["delete"](url), url); | |
| }, | |
| getScript: function(url) { | |
| return wrap($.getScript(url), url); | |
| }, | |
| catch401: function(err) { | |
| if (err.status === 401) { | |
| } | |
| }, | |
| catch404: function(err) { | |
| if (err.status === 404) { | |
| } | |
| }, | |
| Sleep: function(ms) { | |
| var fn; | |
| return fn = function(res) { | |
| return new Promise(function(resolve, reject) { | |
| var cb; | |
| cb = function() { | |
| return resolve(res); | |
| }; | |
| return setTimeout(cb, ms); | |
| }); | |
| }; | |
| }, | |
| fallbackChain: function(getters) { | |
| var first, next, p; | |
| _.types(getters, 'functions...'); | |
| first = true; | |
| p = preq.resolved; | |
| while (getters.length > 0) { | |
| next = getters.shift(); | |
| if (first) { | |
| p = p.then(next); | |
| first = false; | |
| } else { | |
| p = p["catch"](next); | |
| } | |
| } | |
| return p; | |
| } | |
| }); | |
| proxiedUrl = function(url) { | |
| return /wikidata\.org/.test(url); | |
| }; | |
| preq.wrap = wrap = function(jqPromise, url) { | |
| return new Promise(function(resolve, reject) { | |
| return jqPromise.then(resolve).fail(function(err) { | |
| return reject(rewriteError(err, url)); | |
| }); | |
| }); | |
| }; | |
| rewriteError = function(err, url) { | |
| var error, responseJSON, responseText, status, statusText; | |
| status = err.status, statusText = err.statusText, responseText = err.responseText, responseJSON = err.responseJSON; | |
| error = new Error(status + ": " + statusText + " - " + responseText + " - " + url); | |
| return _.extend(error, { | |
| status: status, | |
| statusText: statusText, | |
| responseText: responseText, | |
| responseJSON: responseJSON | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/qlabel/labels_helpers", function(exports, require, module) { | |
| var labels; | |
| labels = {}; | |
| module.exports = { | |
| getLabel: function(qid, lang) { | |
| var data; | |
| data = labels[qid]; | |
| if (data != null) { | |
| return data[lang] || data.en || data.original || _.pickOne(data); | |
| } | |
| }, | |
| setLabel: function(qid, lang, label) { | |
| labels[qid] || (labels[qid] = {}); | |
| labels[qid][lang] = label; | |
| return label; | |
| }, | |
| getKnownQids: function() { | |
| return Object.keys(labels); | |
| }, | |
| resetLabels: function() { | |
| return labels = {}; | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/qlabel/qlabel", function(exports, require, module) { | |
| var attribute, className, display, elements, endRefreshMode, gatherRequiredQids, getElements, getKnownQids, getLabel, getMissingEntities, getQid, getWikidataEntities, language, ref, refresh, refreshData, resetLabels, selector, setEntityOriginalLang, setLabel, update, wd_; | |
| className = 'qlabel'; | |
| selector = "." + className; | |
| attribute = 'data-qid'; | |
| wd_ = require('lib/wikidata'); | |
| ref = require('./labels_helpers'), getLabel = ref.getLabel, setLabel = ref.setLabel, getKnownQids = ref.getKnownQids, resetLabels = ref.resetLabels; | |
| language = null; | |
| elements = null; | |
| refresh = false; | |
| getQid = function(el) { | |
| return el.getAttribute(attribute); | |
| }; | |
| getElements = function() { | |
| return document.querySelectorAll(selector); | |
| }; | |
| gatherRequiredQids = function() { | |
| return [].map.call(getElements(), getQid); | |
| }; | |
| display = function() { | |
| var el, i, label, len, qid, ref1; | |
| ref1 = getElements(); | |
| for (i = 0, len = ref1.length; i < len; i++) { | |
| el = ref1[i]; | |
| qid = getQid(el); | |
| if (qid != null) { | |
| label = getLabel(qid, language); | |
| if (label != null) { | |
| el.textContent = label; | |
| el.className = el.className.replace(className, ''); | |
| } | |
| } | |
| } | |
| }; | |
| getWikidataEntities = function(qids) { | |
| return Entities.data.wd.local.get(qids, null, refresh).then(function(entities) { | |
| var claims, entity, id, label, labels, lang; | |
| for (id in entities) { | |
| entity = entities[id]; | |
| labels = entity.labels, claims = entity.claims; | |
| setEntityOriginalLang(id, claims, labels); | |
| for (lang in labels) { | |
| label = labels[lang]; | |
| setLabel(id, lang, label.value); | |
| } | |
| } | |
| }); | |
| }; | |
| setEntityOriginalLang = function(id, claims, labels) { | |
| var originalLang, originalValue, ref1; | |
| originalLang = wd_.getOriginalLang(claims, true); | |
| originalValue = (ref1 = labels[originalLang]) != null ? ref1.value : void 0; | |
| if (originalValue != null) { | |
| setLabel(id, 'original', originalValue); | |
| } | |
| }; | |
| getMissingEntities = function(qids) { | |
| var missingQids; | |
| missingQids = _.without(qids, getKnownQids()); | |
| if (missingQids.length > 0) { | |
| return getWikidataEntities(qids); | |
| } else { | |
| return _.preq.resolved; | |
| } | |
| }; | |
| update = function(lang) { | |
| var qids; | |
| language = lang; | |
| qids = gatherRequiredQids(); | |
| if (qids.length === 0) { | |
| return; | |
| } | |
| getMissingEntities(qids).then(display)["catch"](_.Error('qlabel err')); | |
| return null; | |
| }; | |
| refreshData = function() { | |
| refresh = true; | |
| resetLabels(); | |
| return setTimeout(endRefreshMode, 5000); | |
| }; | |
| endRefreshMode = function() { | |
| return refresh = false; | |
| }; | |
| module.exports = { | |
| update: _.debounce(update, 200), | |
| refreshData: refreshData | |
| }; | |
| wd_.getLabel = function(qids, lang) { | |
| return getWikidataEntities(qids).then(function() { | |
| return _.forceArray(qids).map(function(qid) { | |
| return getLabel(qid, lang); | |
| }).join(', '); | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/querystring_helpers", function(exports, require, module) { | |
| var allowPersistantQuery; | |
| allowPersistantQuery = require('./allow_persistant_query'); | |
| module.exports = function(app, _) { | |
| var get, getPathname, getQuery, keep, set; | |
| get = function(key) { | |
| var ref; | |
| return (ref = getQuery()) != null ? ref[key] : void 0; | |
| }; | |
| set = function(key, value) { | |
| var fullPath, pathname, query; | |
| pathname = getPathname(); | |
| query = getQuery(); | |
| query[key] = value; | |
| fullPath = _.buildPath(pathname, query); | |
| return app.navigateReplace(fullPath); | |
| }; | |
| keep = function(newRoute) { | |
| var currentQuery, k, keptQuery, newQuery, newRouteSection, ref, test, v; | |
| ref = newRoute.split('?'), newRoute = ref[0], newQuery = ref[1]; | |
| newQuery = _.parseQuery(newQuery); | |
| currentQuery = getQuery(); | |
| keptQuery = {}; | |
| newRouteSection = _.routeSection(newRoute); | |
| for (k in currentQuery) { | |
| v = currentQuery[k]; | |
| test = allowPersistantQuery[k]; | |
| if (typeof test === "function" ? test(newRouteSection) : void 0) { | |
| keptQuery[k] = v; | |
| } | |
| } | |
| newQuery = _.extend(keptQuery, newQuery); | |
| return _.buildPath(newRoute, newQuery); | |
| }; | |
| getPathname = function() { | |
| return window.location.pathname.slice(1); | |
| }; | |
| getQuery = function() { | |
| return _.parseQuery(window.location.search.slice(1)); | |
| }; | |
| app.reqres.setHandlers({ | |
| 'route:querystring:get': get, | |
| 'route:querystring:keep': keep | |
| }); | |
| return app.commands.setHandlers({ | |
| 'route:querystring:set': set | |
| }); | |
| }; | |
| }); | |
| ;require.register("lib/scanner", function(exports, require, module) { | |
| module.exports = { | |
| url: (function() { | |
| var callback, encodedCallback, url; | |
| callback = _.buildPath(window.location.root + "/entity/isbn:{CODE}/add", { | |
| SCAN_FORMATS: 'UPC_A,EAN_13', | |
| raw: '{RAWCODE}' | |
| }); | |
| encodedCallback = encodeURIComponent(callback); | |
| url = _.buildPath("zxing://scan/", { | |
| ret: encodedCallback | |
| }); | |
| return url; | |
| })() | |
| }; | |
| }); | |
| ;require.register("lib/shared/api/img", function(exports, require, module) { | |
| module.exports = function(_, root) { | |
| var img; | |
| if (root == null) { | |
| root = ''; | |
| } | |
| return img = function(path, width, height) { | |
| var href, key; | |
| if (width == null) { | |
| width = 1600; | |
| } | |
| if (height == null) { | |
| height = 1600; | |
| } | |
| if (!_.isNonEmptyString(path)) { | |
| return; | |
| } | |
| if (/^http/.test(path)) { | |
| key = _.hashCode(path); | |
| href = encodeURIComponent(path); | |
| return root + "/img/" + width + "x" + height + "/" + key + "?href=" + href; | |
| } else { | |
| path = path.replace('/img/', ''); | |
| return root + "/img/" + width + "x" + height + "/" + path; | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/books", function(exports, require, module) { | |
| module.exports = function(_) { | |
| var methods; | |
| return methods = { | |
| isIsbn: function(text) { | |
| var cleanedText; | |
| cleanedText = this.normalizeIsbn(text); | |
| if (this.isNormalizedIsbn(cleanedText)) { | |
| switch (cleanedText.length) { | |
| case 10: | |
| return 10; | |
| case 13: | |
| return 13; | |
| } | |
| } | |
| return false; | |
| }, | |
| normalizeIsbn: function(text) { | |
| return text.trim().replace(/-/g, '').replace(/\s/g, ''); | |
| }, | |
| isNormalizedIsbn: function(text) { | |
| return /^(97(8|9))?\d{9}(\d|X)$/.test(text); | |
| }, | |
| uncurl: function(url) { | |
| return url.replace('&edge=curl', ''); | |
| }, | |
| zoom: function(url) { | |
| return url.replace('&zoom=1', '&zoom=2'); | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/global_libs_extender", function(exports, require, module) { | |
| module.exports = function() { | |
| var add; | |
| Array.prototype.first = function() { | |
| return this[0]; | |
| }; | |
| Array.prototype.last = function() { | |
| return this.slice(-1)[0]; | |
| }; | |
| Array.prototype.clone = function() { | |
| return this.slice(0); | |
| }; | |
| add = function(a, b) { | |
| return a + b; | |
| }; | |
| Array.prototype.sum = function() { | |
| return this.reduce(add, 0); | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/handlebars_helpers", function(exports, require, module) { | |
| module.exports = function(_, appApi) { | |
| var getImgDimension, helpers_, onePictureOnly; | |
| onePictureOnly = function(arg) { | |
| if (_.isArray(arg)) { | |
| return arg[0]; | |
| } else { | |
| return arg; | |
| } | |
| }; | |
| getImgDimension = function(dimension, defaultValue) { | |
| if (_.isNumber(dimension)) { | |
| return dimension; | |
| } else { | |
| return defaultValue; | |
| } | |
| }; | |
| return helpers_ = { | |
| src: function(path, width, height, extend) { | |
| if (_.isDataUrl(path)) { | |
| return path; | |
| } | |
| width = getImgDimension(width, 1600); | |
| width = _.bestImageWidth(width); | |
| height = getImgDimension(height, width); | |
| path = onePictureOnly(path); | |
| if (path == null) { | |
| return ''; | |
| } | |
| return appApi.img(path, width, height); | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/notifications_settings_list", function(exports, require, module) { | |
| module.exports = ['global', 'inventories_activity_summary', 'friend_accepted_request', 'friendship_request', 'group_invite', 'group_acceptRequest', 'your_item_was_requested', 'update_on_your_item', 'update_on_item_you_requested']; | |
| }); | |
| ;require.register("lib/shared/promises", function(exports, require, module) { | |
| var resolved; | |
| resolved = Object.freeze(Promise.resolve()); | |
| module.exports = function(Promise) { | |
| return { | |
| resolve: Promise.resolve.bind(Promise), | |
| reject: Promise.reject.bind(Promise), | |
| resolved: resolved, | |
| start: resolved | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/regex", function(exports, require, module) { | |
| module.exports = { | |
| Email: /.+@.+\..+/i, | |
| Uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/, | |
| CouchUuid: /^[0-9a-f]{32}$/, | |
| Lang: /^\w{2}$/, | |
| LocalImg: /^\/img\/[0-9a-f]{40}.jpg$/, | |
| Username: /^\w{1,20}$/, | |
| EntityUri: /^(wd:Q[0-9]+|(isbn|inv):[\w\-]+)$/ | |
| }; | |
| }); | |
| ;require.register("lib/shared/shared_libs", function(exports, require, module) { | |
| var sharedPath; | |
| sharedPath = 'lib/shared/'; | |
| module.exports = function(name) { | |
| return require("" + sharedPath + name); | |
| }; | |
| }); | |
| ;require.register("lib/shared/tests", function(exports, require, module) { | |
| module.exports = function(regex_) { | |
| return { | |
| isLocalImg: function(url) { | |
| return regex_.LocalImg.test(url); | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/transaction_side_effects", function(exports, require, module) { | |
| module.exports = function(actions, _) { | |
| var changeOwnerIfOneWay, setItemBusyness, setItemToBusy, setItemToNotBusy, sideEffets; | |
| setItemBusyness = actions.setItemBusyness, changeOwnerIfOneWay = actions.changeOwnerIfOneWay; | |
| setItemToBusy = _.partial(setItemBusyness, true); | |
| setItemToNotBusy = _.partial(setItemBusyness, false); | |
| return sideEffets = { | |
| accepted: setItemToBusy, | |
| declined: _.noop, | |
| confirmed: changeOwnerIfOneWay, | |
| returned: setItemToNotBusy, | |
| cancelled: setItemToNotBusy | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/transactions", function(exports, require, module) { | |
| module.exports = function(_) { | |
| var basicNextActions, findNextActions, getNextActionsList, isActive, isArchived, nextActionsWithReturn; | |
| basicNextActions = { | |
| requested: { | |
| owner: 'accept/decline', | |
| requester: 'waiting:accepted' | |
| }, | |
| accepted: { | |
| owner: 'waiting:confirmed', | |
| requester: 'confirm' | |
| }, | |
| declined: { | |
| owner: null, | |
| requester: null | |
| }, | |
| confirmed: { | |
| owner: null, | |
| requester: null | |
| } | |
| }; | |
| nextActionsWithReturn = _.extend({}, basicNextActions, { | |
| confirmed: { | |
| owner: 'returned', | |
| requester: 'waiting:returned' | |
| }, | |
| returned: { | |
| owner: null, | |
| requester: null | |
| } | |
| }); | |
| getNextActionsList = function(transactionName) { | |
| if (transactionName === 'lending') { | |
| return nextActionsWithReturn; | |
| } else { | |
| return basicNextActions; | |
| } | |
| }; | |
| findNextActions = function(transacData) { | |
| var mainUserIsOwner, name, nextActions, role, state; | |
| name = transacData.name, state = transacData.state, mainUserIsOwner = transacData.mainUserIsOwner; | |
| nextActions = getNextActionsList(name, state); | |
| role = mainUserIsOwner ? 'owner' : 'requester'; | |
| return nextActions[state][role]; | |
| }; | |
| isActive = function(transacData) { | |
| return findNextActions(transacData) != null; | |
| }; | |
| isArchived = function(transacData) { | |
| return !isActive(transacData); | |
| }; | |
| return module.exports = { | |
| findNextActions: findNextActions, | |
| isActive: isActive, | |
| isArchived: isArchived | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/utils", function(exports, require, module) { | |
| var slice = [].slice; | |
| module.exports = { | |
| Full: function() { | |
| var args, context, fn, fullFn; | |
| fn = arguments[0], context = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; | |
| return fullFn = function() { | |
| return fn.apply(context, args); | |
| }; | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/shared/wiki_sitelinks", function(exports, require, module) { | |
| var getBestWikiProjectInfo, getEpubLink, getWikiProjectTitle, pickOneWikiProjectTitle; | |
| module.exports = { | |
| wikipedia: function(sitelinks, lang) { | |
| return getBestWikiProjectInfo(sitelinks, 'wiki', 'wikipedia', lang, this.originalLang); | |
| }, | |
| wikisource: function(sitelinks, lang) { | |
| var wsData; | |
| wsData = getBestWikiProjectInfo(sitelinks, 'wikisource', 'wikisource', lang, this.originalLang); | |
| if (wsData != null) { | |
| wsData.epub = getEpubLink(wsData); | |
| return wsData; | |
| } | |
| } | |
| }; | |
| getBestWikiProjectInfo = function(sitelinks, projectBaseName, projectRoot, lang, originalLang) { | |
| var L, getTitleForLang, ref, ref1, ref2, ref3, title, url; | |
| getTitleForLang = function(Lang) { | |
| return getWikiProjectTitle(sitelinks, projectBaseName, Lang); | |
| }; | |
| ref = [getTitleForLang(lang), lang], title = ref[0], L = ref[1]; | |
| if ((originalLang != null) && (title == null)) { | |
| ref1 = [getTitleForLang(originalLang), originalLang], title = ref1[0], L = ref1[1]; | |
| } | |
| if (title == null) { | |
| ref2 = [getTitleForLang('en'), 'en'], title = ref2[0], L = ref2[1]; | |
| } | |
| if (title == null) { | |
| ref3 = pickOneWikiProjectTitle(sitelinks, projectBaseName), title = ref3[0], L = ref3[1]; | |
| } | |
| if ((title != null) && L) { | |
| title = encodeURIComponent(title); | |
| url = "https://" + L + "." + projectRoot + ".org/wiki/" + title; | |
| return { | |
| title: title, | |
| lang: L, | |
| url: url | |
| }; | |
| } | |
| }; | |
| getWikiProjectTitle = function(sitelinks, projectBaseName, lang) { | |
| var link; | |
| link = sitelinks != null ? sitelinks["" + lang + projectBaseName] : void 0; | |
| if ((link != null ? link.title : void 0) != null) { | |
| return link.title; | |
| } | |
| }; | |
| pickOneWikiProjectTitle = function(sitelinks, projectBaseName) { | |
| var L, k, match, v; | |
| for (k in sitelinks) { | |
| v = sitelinks[k]; | |
| match = k.split(projectBaseName); | |
| if (match.length === 2) { | |
| L = match[0]; | |
| return [v.title, L]; | |
| } | |
| } | |
| return []; | |
| }; | |
| getEpubLink = function(wikisourceData) { | |
| var lang, title; | |
| title = wikisourceData.title, lang = wikisourceData.lang; | |
| return "http://wsexport.wmflabs.org/tool/book.php?lang=" + lang + "&format=epub&page=" + title; | |
| }; | |
| }); | |
| ;require.register("lib/shared/wikidata", function(exports, require, module) { | |
| var Q; | |
| Q = require('./wikidata_aliases').Q; | |
| module.exports = function(promises_, _, wdk) { | |
| var API, helpers; | |
| API = require('./wikidata_api')(_); | |
| return helpers = { | |
| API: API, | |
| getEntities: function(ids, languages, props) { | |
| var url; | |
| url = wdk.getEntities(ids, languages, props); | |
| return promises_.get(url); | |
| }, | |
| getUri: function(id) { | |
| return 'wd:' + wdk.normalizeId(id); | |
| }, | |
| isBook: function(P31Array) { | |
| return _.haveAMatch(Q.books, P31Array); | |
| }, | |
| isArticle: function(P31Array) { | |
| return _.haveAMatch(Q.articles, P31Array); | |
| }, | |
| entityIsBook: function(entity) { | |
| return helpers.isBook(entity.claims.P31); | |
| }, | |
| entityIsArticle: function(entity) { | |
| return helpers.isArticle(entity.claims.P31); | |
| }, | |
| isAuthor: function(P106Array) { | |
| return _.haveAMatch(Q.authors, P106Array); | |
| }, | |
| isHuman: function(P31Array) { | |
| return _.haveAMatch(Q.humans, P31Array); | |
| }, | |
| isGenre: function(P31Array) { | |
| return _.haveAMatch(Q.genres, P31Array); | |
| }, | |
| type: function(entity) { | |
| var P31, ref, ref1; | |
| if (_.isModel(entity)) { | |
| P31 = typeof entity.get === "function" ? (ref = entity.get('claims')) != null ? ref.P31 : void 0 : void 0; | |
| } else { | |
| P31 = (ref1 = entity.claims) != null ? ref1.P31 : void 0; | |
| } | |
| if (P31 != null) { | |
| if (this.isBook(P31)) { | |
| return 'book'; | |
| } | |
| if (this.isArticle(P31)) { | |
| return 'article'; | |
| } | |
| if (this.isHuman(P31)) { | |
| return 'human'; | |
| } | |
| if (this.isGenre(P31)) { | |
| return 'genre'; | |
| } | |
| } | |
| }, | |
| wmCommonsSmallThumb: function(file, width) { | |
| if (width == null) { | |
| width = "100"; | |
| } | |
| return "https://commons.wikimedia.org/w/thumb.php?width=" + width + "&f=" + file; | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/shared/wikidata_aliases", function(exports, require, module) { | |
| var P, Q, aliasedP, aliasedPs, aliases, i, len, mainP; | |
| Q = { | |
| books: ['Q571', 'Q2831984', 'Q1004', 'Q1760610', 'Q14406742', 'Q8261', 'Q25379', 'Q7725634', 'Q17518870', 'Q5185279', 'Q2150386', 'Q37484', 'Q386724', 'Q49084', 'Q34620', 'Q8274'], | |
| edition: ['Q3972943', 'Q17902573'], | |
| articles: ['Q191067', 'Q13442814'], | |
| humans: ['Q5', 'Q10648343', 'Q14073567'], | |
| authors: ['Q36180'], | |
| genres: ['Q483394', 'Q223393'] | |
| }; | |
| P = { | |
| P50: ['P58'] | |
| }; | |
| aliases = {}; | |
| for (mainP in P) { | |
| aliasedPs = P[mainP]; | |
| for (i = 0, len = aliasedPs.length; i < len; i++) { | |
| aliasedP = aliasedPs[i]; | |
| aliases[aliasedP] = mainP; | |
| } | |
| } | |
| Q.softAuthors = Q.authors.concat(Q.humans); | |
| module.exports = { | |
| aliases: aliases, | |
| Q: Q, | |
| P: P | |
| }; | |
| }); | |
| ;require.register("lib/shared/wikidata_api", function(exports, require, module) { | |
| module.exports = function(_) { | |
| var API; | |
| return API = { | |
| wikidata: { | |
| base: 'https://www.wikidata.org/w/api.php', | |
| search: function(search, limit, format) { | |
| if (limit == null) { | |
| limit = '25'; | |
| } | |
| if (format == null) { | |
| format = 'json'; | |
| } | |
| return _.buildPath(API.wikidata.base, { | |
| action: 'query', | |
| list: 'search', | |
| srlimit: limit, | |
| format: format, | |
| srsearch: search | |
| }); | |
| } | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("lib/translate", function(exports, require, module) { | |
| var hasModifiers, isShortkey, modifiers, vowels, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = function(key, ctx) { | |
| var lang, val; | |
| lang = app.polyglot.currentLocale; | |
| val = app.polyglot.t(key, ctx); | |
| if (indexOf.call(hasModifiers, lang) >= 0) { | |
| return modifiers[lang](key, val, ctx); | |
| } else { | |
| return val; | |
| } | |
| }; | |
| modifiers = { | |
| fr: function(key, val, data) { | |
| var firstLetter, k, re, username; | |
| if ((data != null) && isShortkey(key)) { | |
| k = app.polyglot.phrases[key]; | |
| username = data.username; | |
| if (username != null) { | |
| firstLetter = username[0].toLowerCase(); | |
| if (indexOf.call(vowels, firstLetter) >= 0) { | |
| if (/de\s(<strong>)?%{username}/.test(k)) { | |
| re = new RegExp("de (<strong>)?" + username); | |
| return val.replace(re, "d'$1" + username); | |
| } | |
| } | |
| } | |
| } | |
| return val; | |
| } | |
| }; | |
| hasModifiers = Object.keys(modifiers); | |
| isShortkey = function(key) { | |
| return /_/.test(key); | |
| }; | |
| vowels = 'aeiouy'; | |
| }); | |
| ;require.register("lib/unhandled_error_logger", function(exports, require, module) { | |
| var getContext, parseErrorObject; | |
| module.exports.initialize = function() { | |
| return window.onerror = function() { | |
| var args, err, name; | |
| args = [].slice.call(arguments, 0); | |
| if ((args != null ? args[4] : void 0) != null) { | |
| name = args[4].name; | |
| if (name === 'InvalidStateError') { | |
| return console.warn('InvalidStateError: no worries, already handled'); | |
| } | |
| if (name === 'ViewDestroyedError') { | |
| return console.warn('ViewDestroyedError: not reported'); | |
| } | |
| } | |
| err = parseErrorObject.apply(null, args); | |
| if (window.navigator.webkitGetGamepads == null) { | |
| console.error.apply(console, err, '(handled by window.onerror)'); | |
| } | |
| return window.reportErr(err); | |
| }; | |
| }; | |
| parseErrorObject = function(errorMsg, url, lineNumber, columnNumber, errObj) { | |
| var context, report, stack; | |
| if (errObj) { | |
| stack = errObj.stack, context = errObj.context; | |
| stack = stack != null ? stack.split('\n') : void 0; | |
| report = [errorMsg + " " + url + " " + lineNumber + ":" + columnNumber, stack]; | |
| if (context != null) { | |
| report.push(context); | |
| } | |
| return report; | |
| } else { | |
| return [errorMsg, url, lineNumber, columnNumber]; | |
| } | |
| }; | |
| window.reportErr = function(report) { | |
| var err, ref; | |
| if ((report != null ? report.error : void 0) == null) { | |
| err = report; | |
| report = { | |
| error: err | |
| }; | |
| } | |
| report.context = getContext(); | |
| if ((typeof app !== "undefined" && app !== null ? (ref = app.session) != null ? ref.recordError : void 0 : void 0) != null) { | |
| return app.session.recordError(report); | |
| } else { | |
| return $.post('/api/logs/public', report); | |
| } | |
| }; | |
| getContext = function() { | |
| var context, id, ref, userData, username; | |
| context = []; | |
| if (typeof app !== "undefined" && app !== null ? (ref = app.user) != null ? ref.loggedIn : void 0 : void 0) { | |
| id = app.user.id; | |
| username = app.user.get('username'); | |
| if ((id != null) && (username != null)) { | |
| userData = "user: " + id + " (" + username + ")"; | |
| } else { | |
| userData = "user logged in but error happened before data arrived"; | |
| } | |
| } else { | |
| userData = "user: not logged user"; | |
| } | |
| context = [userData, navigator.userAgent]; | |
| return context; | |
| }; | |
| }); | |
| ;require.register("lib/urls", function(exports, require, module) { | |
| var bcHash, host, root; | |
| host = 'https://inventaire.io'; | |
| root = window.env === 'dev' ? host : ''; | |
| bcHash = '1QGMFXJevme8eNCusNmLddiecAiXspSguw'; | |
| module.exports = { | |
| host: host, | |
| contact: { | |
| email: 'hello@inventaire.io', | |
| mailto: 'mailto:hello@inventaire.io' | |
| }, | |
| blog: 'http://asongofinventoryandfire.tumblr.com', | |
| twitter: 'https://twitter.com/inventaire_io', | |
| facebook: 'https://facebook.com/inventaire.io', | |
| github: 'https://github.com/inventaire/inventaire', | |
| transifex: 'https://www.transifex.com/organization/inventaire', | |
| trello: 'https://trello.com/b/0lKcsZDj/inventaire-roadmap', | |
| tracker: 'https://piwik.allmende.io/piwik.php', | |
| images: { | |
| banner: root + "/img/a703e4c65a44dab0e9086722ac2967c3cdf03024.jpg", | |
| bokeh: root + "/img/6fca0921e336dd4dab1f1900e8f1143a9a9e9623.jpg", | |
| ginnerobot: root + "/img/28945a3c26a986b371767cfdb9d0e11156a6d641.jpg", | |
| brittanystevens: root + "/img/f3c063914d81996e3d262201d1e71c5e38212948.jpg" | |
| }, | |
| bitcoin: { | |
| hash: bcHash, | |
| url: "bitcoin:" + bcHash, | |
| coinbase: 'https://www.coinbase.com/inventaire', | |
| qrcode: root + "/img/f086157157209ee0b3a09ff7bd8eb88c79fb658d.jpg" | |
| }, | |
| gratipay: 'https://gratipay.com/inventaire-io' | |
| }; | |
| }); | |
| ;require.register("lib/utils", function(exports, require, module) { | |
| var books_, isCouchUuid, oneDay, regex_, tests_, wd_, | |
| slice = [].slice; | |
| wd_ = requireProxy('lib/wikidata'); | |
| books_ = requireProxy('lib/books'); | |
| regex_ = sharedLib('regex'); | |
| tests_ = sharedLib('tests')(regex_); | |
| isCouchUuid = regex_.CouchUuid.test.bind(regex_.CouchUuid); | |
| oneDay = 24 * 60 * 60 * 1000; | |
| module.exports = function(Backbone, _, app, window, csle) { | |
| var loggers, utils; | |
| loggers = require('./loggers')(_, csle); | |
| utils = { | |
| setCookie: function(key, value) { | |
| return this.preq.post('/api/cookie', { | |
| key: key, | |
| value: value | |
| })["catch"](_.Error("setCookie: failed: " + key + " - " + value)); | |
| }, | |
| i18n: require('./translate'), | |
| I18n: function() { | |
| var args; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| return _.capitaliseFirstLetter(_.i18n.apply(_, args)); | |
| }, | |
| icon: function(name, classes) { | |
| return "<i class='fa fa-" + name + " " + classes + "'></i> "; | |
| }, | |
| updateQuery: function(newParams) { | |
| var currentQueryString, pathname, query, ref, route; | |
| ref = Backbone.history.fragment.split('?'), pathname = ref[0], currentQueryString = ref[1]; | |
| query = this.parseQuery(currentQueryString); | |
| _.extend(query, newParams); | |
| route = this.buildPath(pathname, query); | |
| if (route != null) { | |
| return app.navigate(route); | |
| } else { | |
| return _.error([query, newParams], 'couldnt updateQuery'); | |
| } | |
| }, | |
| inspect: function(obj, label) { | |
| if (label != null) { | |
| _.log(obj, label + " added to window.current for inspection"); | |
| } | |
| if (window.current != null) { | |
| window.previous || (window.previous = []); | |
| window.previous.unshift(window.current); | |
| } | |
| return window.current = obj; | |
| }, | |
| hasKnownUriDomain: function(str) { | |
| var id, prefix, ref; | |
| if (_.isString(str)) { | |
| ref = str.split(':'), prefix = ref[0], id = ref[1]; | |
| if ((prefix != null) && (id != null)) { | |
| switch (prefix) { | |
| case 'wd': | |
| if (wd_.isWikidataId(id)) { | |
| return true; | |
| } | |
| break; | |
| case isbn: | |
| if (books_.isIsbn(id)) { | |
| return true; | |
| } | |
| break; | |
| case 'inv': | |
| if (this.isUuid(id)) { | |
| return true; | |
| } | |
| } | |
| } | |
| } | |
| return false; | |
| }, | |
| lastRouteMatch: function(regex) { | |
| var last, ref; | |
| if (((ref = Backbone.history.last) != null ? ref[1] : void 0) != null) { | |
| last = Backbone.history.last[1]; | |
| return regex.test(last); | |
| } else { | |
| return false; | |
| } | |
| }, | |
| openJsonWindow: function(obj, windowName) { | |
| var data, json; | |
| json = JSON.stringify(obj, null, 4); | |
| data = 'data:application/json;charset=utf-8,' + encodeURI(json); | |
| return window.open(data, windowName); | |
| }, | |
| style: function(text, style) { | |
| switch (style) { | |
| case 'strong': | |
| return "<strong>" + text + "</strong>"; | |
| } | |
| }, | |
| stringOnly: function(str) { | |
| if (typeof str === 'string') { | |
| return str; | |
| } else { | |
| } | |
| }, | |
| isntEmpty: function(array) { | |
| return !this.isEmpty(array); | |
| }, | |
| pickOne: function(obj) { | |
| var k; | |
| k = Object.keys(obj)[0]; | |
| return obj[k]; | |
| }, | |
| isModel: function(obj) { | |
| return obj instanceof Backbone.Model; | |
| }, | |
| isView: function(obj) { | |
| return obj instanceof Backbone.View; | |
| }, | |
| validImageSrc: function(url, callback) { | |
| var cb, image; | |
| image = new Image(); | |
| image.src = url; | |
| cb = function() { | |
| if (image.complete) { | |
| return this.preq.resolve(url); | |
| } else { | |
| return this.preq.reject(url); | |
| } | |
| }; | |
| return setTimeout(cb, 500); | |
| }, | |
| allValid: function(array, test) { | |
| var el, j, len, result; | |
| result = true; | |
| for (j = 0, len = array.length; j < len; j++) { | |
| el = array[j]; | |
| if (!test(el)) { | |
| result = false; | |
| } | |
| } | |
| return result; | |
| }, | |
| isUri: function(str) { | |
| var id, prefix, ref; | |
| ref = str.split(':'), prefix = ref[0], id = ref[1]; | |
| if ((prefix != null) && (id != null)) { | |
| switch (prefix) { | |
| case 'wd': | |
| return wd.isWikidataId(id); | |
| case 'isbn': | |
| return books_.isNormalizedIsbn(id); | |
| } | |
| } | |
| return false; | |
| }, | |
| uniq: function(array) { | |
| var j, len, obj, value; | |
| obj = {}; | |
| for (j = 0, len = array.length; j < len; j++) { | |
| value = array[j]; | |
| obj[value] = true; | |
| } | |
| return Object.keys(obj); | |
| }, | |
| values: function(obj) { | |
| var index, length, props, result; | |
| index = -1; | |
| props = Object.keys(obj); | |
| length = props.length; | |
| result = Array(length); | |
| while (++index < length) { | |
| result[index] = obj[props[index]]; | |
| } | |
| return result; | |
| }, | |
| localUrl: function(url) { | |
| return /^\//.test(url); | |
| }, | |
| allValues: function(obj) { | |
| return this.flatten(this.values(obj)); | |
| }, | |
| now: function() { | |
| return new Date().getTime(); | |
| }, | |
| getYearFromEpoch: function(epochTime) { | |
| return new Date(epochTime).getYear() + 1900; | |
| }, | |
| yearsAgo: function(years) { | |
| return new Date().getYear() + 1900 - years; | |
| }, | |
| objectifyPairs: function(array) { | |
| var err, i, key, obj, pairs, ref, value; | |
| pairs = array.length / 2; | |
| if (pairs % 1 !== 0) { | |
| err = 'expected pairs, got odd number of arguments'; | |
| throw new Error(err, arguments); | |
| } | |
| obj = {}; | |
| if (pairs >= 1) { | |
| i = 0; | |
| while (i < pairs) { | |
| ref = [array[i], array[i + 1]], key = ref[0], value = ref[1]; | |
| obj[key] = value; | |
| i += 1; | |
| } | |
| } | |
| return obj; | |
| }, | |
| smallScreen: function(ceil) { | |
| if (ceil == null) { | |
| ceil = 1200; | |
| } | |
| return $(window).width() < ceil; | |
| }, | |
| deepClone: function(obj) { | |
| this.type(obj, 'object'); | |
| return JSON.parse(JSON.stringify(obj)); | |
| }, | |
| capitaliseFirstLetter: function(str) { | |
| if (str === '') { | |
| return ''; | |
| } | |
| return str[0].toUpperCase() + str.slice(1); | |
| }, | |
| isUuid: function(str) { | |
| return regex_.Uuid.test(str); | |
| }, | |
| isEmail: function(str) { | |
| return regex_.Email.test(str); | |
| }, | |
| isUserId: isCouchUuid, | |
| isItemId: isCouchUuid, | |
| isUsername: function(username) { | |
| return regex_.Username.test(username); | |
| }, | |
| isEntityUri: function(uri) { | |
| return regex_.EntityUri.test(uri); | |
| }, | |
| isOpenedOutside: function(e) { | |
| return e.ctrlKey; | |
| }, | |
| noop: function() {}, | |
| escapeKeyPressed: function(e) { | |
| return e.keyCode === 27; | |
| }, | |
| currentRoute: function() { | |
| return location.pathname.slice(1); | |
| }, | |
| currentQuerystring: function() { | |
| return location.search; | |
| }, | |
| setQuerystring: function(url, key, value) { | |
| var href, qs, qsObj, ref; | |
| ref = url.split('?'), href = ref[0], qs = ref[1]; | |
| if (qs != null) { | |
| qsObj = _.parseQuery(qs); | |
| qsObj[key] = value; | |
| return _.buildPath(href, qsObj); | |
| } else { | |
| return href + "?" + key + "=" + value; | |
| } | |
| }, | |
| routeSection: function(route) { | |
| return route.split(/[^\w]/)[0]; | |
| }, | |
| currentSection: function() { | |
| return _.routeSection(_.currentRoute()); | |
| }, | |
| scrollTop: function($el, duration) { | |
| var top; | |
| if (duration == null) { | |
| duration = 500; | |
| } | |
| if (_.isString) { | |
| $el = $($el); | |
| } | |
| top = $el.position().top; | |
| return $('html, body').animate({ | |
| scrollTop: top | |
| }, duration); | |
| }, | |
| scrollHeight: function(height, ms) { | |
| if (ms == null) { | |
| ms = 500; | |
| } | |
| return $('html, body').animate({ | |
| scrollTop: height | |
| }, ms); | |
| }, | |
| BasicPlugin: function(events, handlers) { | |
| return _.partial(_.basicPlugin, events, handlers); | |
| }, | |
| basicPlugin: function(events, handlers) { | |
| this.events || (this.events = {}); | |
| _.extend(this.events, events); | |
| _.extend(this, handlers); | |
| }, | |
| stringContains: function(str, target) { | |
| return str.split(target).length > 1; | |
| }, | |
| cutBeforeWord: function(text, limit) { | |
| var shortenedText; | |
| shortenedText = text.slice(0, +limit + 1 || 9e9); | |
| return shortenedText.replace(/\s\w+$/, ''); | |
| }, | |
| isCanvas: function(obj) { | |
| var ref; | |
| return (obj != null ? (ref = obj.nodeName) != null ? ref.toLowerCase() : void 0 : void 0) === 'canvas'; | |
| }, | |
| LazyRender: function(view, timespan) { | |
| var cautiousRender; | |
| if (timespan == null) { | |
| timespan = 200; | |
| } | |
| cautiousRender = function() { | |
| if (!view.isDestroyed) { | |
| return view.render(); | |
| } | |
| }; | |
| return _.debounce(cautiousRender, timespan); | |
| }, | |
| invertAttr: function($target, a, b) { | |
| var aVal, bVal; | |
| aVal = $target.attr(a); | |
| bVal = $target.attr(b); | |
| $target.attr(a, bVal); | |
| return $target.attr(b, aVal); | |
| }, | |
| daysAgo: function(epochTime) { | |
| return Math.floor((_.now() - epochTime) / oneDay); | |
| } | |
| }; | |
| return _.extend({}, utils, loggers, tests_); | |
| }; | |
| }); | |
| ;require.register("lib/view_state", function(exports, require, module) { | |
| module.exports = { | |
| CheckViewState: function(view, label) { | |
| var check; | |
| if (label == null) { | |
| label = ''; | |
| } | |
| return check = function(data) { | |
| var err; | |
| if (view.isDestroyed) { | |
| err = new Error(label + " view was destroyed: actions stopped"); | |
| err.destroyed_view = true; | |
| throw err; | |
| } else { | |
| return data; | |
| } | |
| }; | |
| }, | |
| catchDestroyedView: function(err) { | |
| if (err.destroyed_view) { | |
| _.warn(err.message); | |
| } else { | |
| throw err; | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("lib/wikidata", function(exports, require, module) { | |
| var aliases, langProperties, preq, sourcedExtract, wd_; | |
| aliases = sharedLib('wikidata_aliases'); | |
| preq = requireProxy('lib/preq'); | |
| module.exports = wd_ = sharedLib('wikidata')(preq, _, wdk); | |
| wd_.wmCommonsThumbData = function(file, width) { | |
| if (width == null) { | |
| width = 500; | |
| } | |
| width = _.bestImageWidth(width); | |
| return preq.get(app.API.data.commonsThumb(file, width)); | |
| }; | |
| wd_.wmCommonsThumb = function(file, width) { | |
| if (width == null) { | |
| width = 500; | |
| } | |
| return wd_.wmCommonsThumbData(file, width).then(_.property('thumbnail'))["catch"]((function(_this) { | |
| return function(err) { | |
| console.warn("couldnt find " + file + " via tools.wmflabs.org, will use the small thumb version"); | |
| return _this.wmCommonsSmallThumb(file, 200); | |
| }; | |
| })(this)); | |
| }; | |
| wd_.enWpImage = function(enWpTitle) { | |
| return preq.get(app.API.data.enWpImage(enWpTitle)).then(_.property('url'))["catch"](_.ErrorRethrow('wikipediaExtract err')); | |
| }; | |
| wd_.wikipediaExtract = function(lang, title) { | |
| return preq.get(app.API.data.wikipediaExtract(lang, title)).then(function(data) { | |
| var extract, url; | |
| extract = data.extract, url = data.url; | |
| return sourcedExtract(extract, url); | |
| })["catch"](_.ErrorRethrow('wikipediaExtract err')); | |
| }; | |
| sourcedExtract = function(extract, url) { | |
| var text; | |
| if (url != null) { | |
| text = _.i18n('read_more_on_wikipedia'); | |
| return extract += "<br><a href='" + url + "' class='source link' target='_blank'>" + text + "</a>"; | |
| } else { | |
| return extract; | |
| } | |
| }; | |
| wd_.sitelinks = sharedLib('wiki_sitelinks'); | |
| wd_.aliasingClaims = function(claims) { | |
| var after, aliasId, aliased, before, claim, err, error, id; | |
| for (id in claims) { | |
| claim = claims[id]; | |
| aliasId = aliases[id]; | |
| if (aliasId != null) { | |
| before = claims[aliasId] || (claims[aliasId] = []); | |
| aliased = claims[id]; | |
| try { | |
| _.types(before, 'strings...|numbers...'); | |
| _.types(aliased, 'strings...|numbers...'); | |
| after = _.uniq(before.concat(aliased)); | |
| claims[aliasId] = after; | |
| } catch (error) { | |
| err = error; | |
| _.warn([err, id, claim], 'aliasingClaims err'); | |
| } | |
| } | |
| } | |
| return claims; | |
| }; | |
| wd_.getReverseClaims = function(property, value, refresh) { | |
| return preq.get(app.API.data.wdq('claim', property, value, refresh)).then(wdk.parse.wdq.entities); | |
| }; | |
| wd_.queryAuthorWorks = function(authorQid, refresh) { | |
| return preq.get(app.API.data.wdQuery('author-works', authorQid, refresh)).then(wdk.parse.wdq.entities); | |
| }; | |
| langProperties = ['P364', 'P103']; | |
| wd_.getOriginalLang = function(claims, notSimplified) { | |
| var langClaims, originalLangWdId, ref, ref1; | |
| langClaims = _.pick(claims, langProperties); | |
| if (_.objLength(langClaims) === 0) { | |
| return; | |
| } | |
| if (notSimplified) { | |
| langClaims = wdk.simplifyClaims(langClaims); | |
| } | |
| originalLangWdId = (ref = _.pickOne(langClaims)) != null ? ref[0] : void 0; | |
| return (ref1 = window.wdLang.byWdId[originalLangWdId]) != null ? ref1.code : void 0; | |
| }; | |
| }); | |
| ;require.register("modules/comments/collections/comments", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| model: require('../models/comment'), | |
| comparator: function(comment) { | |
| return comment.get('created'); | |
| }, | |
| initialize: function(comments, options) { | |
| return this.item = options.item; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/comments/comments", function(exports, require, module) { | |
| var Comments, addComment, deleteComment, fetchComments, initComments, postComment, poster_, updateComment; | |
| Comments = require('./collections/comments'); | |
| poster_ = require('lib/poster'); | |
| module.exports = function() { | |
| return app.reqres.setHandlers({ | |
| 'comments:init': initComments, | |
| 'comments:post': postComment, | |
| 'comments:update': updateComment, | |
| 'comments:delete': deleteComment | |
| }); | |
| }; | |
| initComments = function(model) { | |
| var comments, fetching; | |
| fetching = null; | |
| if (model.comments == null) { | |
| model.comments = comments = new Comments([], { | |
| item: model | |
| }); | |
| fetching = fetchComments(model.id, comments); | |
| } | |
| return [model.comments, fetching]; | |
| }; | |
| fetchComments = function(itemId, commentsCollection) { | |
| return _.preq.get(_.buildPath(app.API.comments["public"], { | |
| item: itemId | |
| })).then(commentsCollection.add.bind(commentsCollection)); | |
| }; | |
| postComment = function(itemId, message, commentsCollection) { | |
| var comment, commentModel; | |
| comment = { | |
| item: itemId, | |
| message: message | |
| }; | |
| commentModel = addComment(comment, commentsCollection); | |
| return _.preq.post(app.API.comments["private"], comment).then(poster_.UpdateModelIdRev(commentModel))["catch"](poster_.Rewind(commentModel, commentsCollection))["catch"](_.ErrorRethrow('postComment')); | |
| }; | |
| addComment = function(comment, commentsCollection) { | |
| _.extend(comment, { | |
| user: app.user.id, | |
| created: _.now() | |
| }); | |
| return commentsCollection.add(comment); | |
| }; | |
| updateComment = function(commentModel, newMessage) { | |
| var currentMessage; | |
| currentMessage = commentModel.get('message'); | |
| if (newMessage === currentMessage) { | |
| return _.preq.resolved; | |
| } | |
| commentModel.set({ | |
| message: newMessage, | |
| edited: _.now() | |
| }); | |
| return _.preq.put(app.API.comments["private"], { | |
| id: commentModel.id, | |
| message: newMessage | |
| }); | |
| }; | |
| deleteComment = function(commentModel, view) { | |
| return view.$el.trigger('askConfirmation', { | |
| confirmationText: _.i18n('comment_delete_confirmation'), | |
| warningText: _.i18n('cant_undo_warning'), | |
| action: function() { | |
| return _.preq.resolve(commentModel.destroy()); | |
| }, | |
| selector: view.uniqueSelector | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/comments/models/comment", function(exports, require, module) { | |
| module.exports = Backbone.Model.extend({ | |
| url: function() { | |
| return _.buildPath(app.API.comments["private"], { | |
| id: this.id | |
| }); | |
| }, | |
| commentOwner: function() { | |
| return app.user.id === this.get('user'); | |
| }, | |
| itemOwner: function() { | |
| return app.user.id === this.collection.item.get('owner'); | |
| }, | |
| deleteRight: function() { | |
| return this.commentOwner() || this.itemOwner(); | |
| }, | |
| initialize: function() { | |
| return this.set({ | |
| editRight: this.commentOwner(), | |
| deleteRight: this.deleteRight() | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/collections/entities", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| byUri: function(uri) { | |
| return this.findWhere({ | |
| uri: uri | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/collections/isbn_entities", function(exports, require, module) { | |
| var Entities; | |
| Entities = require('./entities'); | |
| module.exports = Entities.extend({ | |
| model: require('../models/isbn_entity') | |
| }); | |
| }); | |
| ;require.register("modules/entities/collections/wikidata_entities", function(exports, require, module) { | |
| var Entities; | |
| Entities = require('./entities'); | |
| module.exports = Entities.extend({ | |
| model: require('../models/wikidata_entity'), | |
| byType: function(type) { | |
| return _(this.models).where({ | |
| type: type | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/entities", function(exports, require, module) { | |
| var API, AuthorLi, Entities, EntityCreate, EntityShow, GenreLayout, InvEntity, IsbnEntity, WikidataEntity, books_, createEntity, error_, getEntitiesLabels, getEntityLocalHref, getEntityModel, getModelFromPrefix, getPrefixId, normalizeEntityUri, saveEntityModel, setHandlers, wd_; | |
| books_ = require('lib/books'); | |
| wd_ = require('lib/wikidata'); | |
| WikidataEntity = require('./models/wikidata_entity'); | |
| IsbnEntity = require('./models/isbn_entity'); | |
| InvEntity = require('./models/inv_entity'); | |
| Entities = require('./collections/entities'); | |
| AuthorLi = require('./views/author_li'); | |
| EntityShow = require('./views/entity_show'); | |
| EntityCreate = require('./views/entity_create'); | |
| GenreLayout = require('./views/genre_layout'); | |
| error_ = require('lib/error'); | |
| module.exports = { | |
| define: function(Entities, app, Backbone, Marionette, $, _) { | |
| var EntitiesRouter; | |
| EntitiesRouter = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'entity/:uri(/:label)/add(/)': 'showAddEntity', | |
| 'entity/:uri(/:label)(/)': 'showEntity' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new EntitiesRouter({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| setHandlers(); | |
| window.Entities = Entities = new Entities; | |
| return Entities.data = require('./entities_data')(app, _, _.preq); | |
| } | |
| }; | |
| API = { | |
| showEntity: function(uri, label, params, region) { | |
| var id, prefix, ref, refresh; | |
| region || (region = app.layout.main); | |
| app.execute('show:loader', { | |
| region: region | |
| }); | |
| ref = getPrefixId(uri), prefix = ref[0], id = ref[1]; | |
| if (!((prefix != null) && (id != null))) { | |
| _.warn('prefix or id missing at showEntity'); | |
| } | |
| refresh = params != null ? params.refresh : void 0; | |
| if (refresh) { | |
| app.execute('qlabel:refresh'); | |
| } | |
| return this._getEntityView(prefix, id, refresh).then(region.show.bind(region))["catch"](this.solveMissingEntity.bind(this, prefix, id))["catch"](function(err) { | |
| _.error(err, 'couldnt showEntity'); | |
| return app.execute('show:404'); | |
| }); | |
| }, | |
| _getEntityView: function(prefix, id, refresh) { | |
| return this.getEntityModel(prefix, id, refresh).then(_.Tap(this._replaceEntityPathname.bind(this))).then(this._getDomainEntityView.bind(this, prefix, refresh)); | |
| }, | |
| _replaceEntityPathname: function(entity) { | |
| return app.navigateReplace(entity.get('pathname')); | |
| }, | |
| _getDomainEntityView: function(prefix, refresh, entity) { | |
| switch (prefix) { | |
| case 'isbn': | |
| case 'inv': | |
| return this.getCommonBookEntityView(entity); | |
| case 'wd': | |
| return this.getWikidataEntityView(entity, refresh); | |
| default: | |
| return _.error("getDomainEntityView err: unknown domain " + prefix); | |
| } | |
| }, | |
| getWikidataEntityView: function(entity, refresh) { | |
| switch (wd_.type(entity)) { | |
| case 'human': | |
| return this.getAuthorView(entity, refresh); | |
| case 'book': | |
| return this.getCommonBookEntityView(entity); | |
| default: | |
| return new GenreLayout({ | |
| model: entity | |
| }); | |
| } | |
| }, | |
| getCommonBookEntityView: function(entity) { | |
| return new EntityShow({ | |
| model: entity | |
| }); | |
| }, | |
| getAuthorView: function(entity, refresh) { | |
| return new AuthorLi({ | |
| model: entity, | |
| standalone: true, | |
| displayBooks: true, | |
| initialLength: 20, | |
| refresh: refresh | |
| }); | |
| }, | |
| getEntitiesModels: function(prefix, ids, refresh) { | |
| var Model, err, error; | |
| refresh = refresh === true; | |
| try { | |
| Model = getModelFromPrefix(prefix); | |
| } catch (error) { | |
| err = error; | |
| return _.preq.reject(err); | |
| } | |
| return Entities.data.get(prefix, ids, 'collection', refresh).then(function(data) { | |
| var models; | |
| if (data == null) { | |
| throw error_["new"]('no data at getEntitiesModels', arguments); | |
| } | |
| models = data.map(function(el) { | |
| var model; | |
| if (el == null) { | |
| return _.warn('missing entity(possible reason: reached API limit, pagination is needed)'); | |
| } | |
| model = new Model(el); | |
| Entities.add(model); | |
| return model; | |
| }); | |
| return models; | |
| }); | |
| }, | |
| getEntitiesModelsWithCatcher: function() { | |
| return this.getEntitiesModels.apply(this, arguments)["catch"](_.Error('getEntitiesModels err')); | |
| }, | |
| getEntityModel: function(prefix, id, refresh) { | |
| if (!((prefix != null) && (id != null))) { | |
| throw error_["new"]('missing prefix or id', arguments); | |
| } | |
| return this.getEntitiesModels(prefix, id, refresh).then(function(models) { | |
| if ((models != null ? models[0] : void 0) != null) { | |
| return models[0]; | |
| } else { | |
| _.log("getEntityModel entity_not_found: " + prefix + ":" + id); | |
| throw error_["new"]('entity_not_found', [prefix, id, models]); | |
| } | |
| }); | |
| }, | |
| showAddEntity: function(uri) { | |
| var id, prefix, ref; | |
| ref = getPrefixId(uri), prefix = ref[0], id = ref[1]; | |
| if ((prefix != null) && (id != null)) { | |
| return this.getEntityModel(prefix, id).then(function(entity) { | |
| return app.execute('show:item:creation:form', { | |
| entity: entity | |
| }); | |
| })["catch"](this.solveMissingEntity.bind(this, prefix, id))["catch"](_.Error('showAddEntity err')); | |
| } | |
| }, | |
| solveMissingEntity: function(prefix, id, err) { | |
| if (err.message === 'entity_not_found') { | |
| return this.showCreateEntity(id); | |
| } else { | |
| throw err; | |
| } | |
| }, | |
| showCreateEntity: function(isbn) { | |
| return app.layout.main.show(new EntityCreate({ | |
| data: isbn, | |
| standalone: true | |
| })); | |
| }, | |
| getEntityPublicItems: function(uri) { | |
| return _.preq.get(app.API.items.publicByEntity(uri)); | |
| } | |
| }; | |
| setHandlers = function() { | |
| app.commands.setHandlers({ | |
| 'show:entity': function(uri, label, params, region) { | |
| var path; | |
| API.showEntity(uri, label, params, region); | |
| path = "entity/" + uri; | |
| if (label != null) { | |
| path += "/" + label; | |
| } | |
| return app.navigate(path); | |
| }, | |
| 'show:entity:from:model': function(model, params, region) { | |
| var label, ref, uri; | |
| ref = model.gets('uri', 'label'), uri = ref[0], label = ref[1]; | |
| if ((uri != null) && (label != null)) { | |
| return app.execute('show:entity', uri, label, params, region); | |
| } else { | |
| throw new Error('couldnt show:entity:from:model'); | |
| } | |
| }, | |
| 'show:entity:refresh': function(model) { | |
| return app.execute('show:entity:from:model', model, { | |
| refresh: true | |
| }); | |
| } | |
| }); | |
| return app.reqres.setHandlers({ | |
| 'get:entity:model': getEntityModel, | |
| 'get:entities:models': API.getEntitiesModelsWithCatcher.bind(API), | |
| 'save:entity:model': saveEntityModel, | |
| 'get:entity:public:items': API.getEntityPublicItems, | |
| 'get:entities:labels': getEntitiesLabels, | |
| 'create:entity': createEntity, | |
| 'get:entity:local:href': getEntityLocalHref, | |
| 'normalize:entity:uri': normalizeEntityUri | |
| }); | |
| }; | |
| getEntityModel = function(prefix, id) { | |
| var ref; | |
| ref = getPrefixId(prefix, id), prefix = ref[0], id = ref[1]; | |
| if ((prefix != null) && (id != null)) { | |
| return API.getEntityModel(prefix, id); | |
| } else { | |
| throw error_["new"]('missing prefix or id', arguments); | |
| } | |
| }; | |
| getEntitiesLabels = function(Qids) { | |
| return Qids.map(function(Qid) { | |
| var ref; | |
| return (ref = Entities.byUri("wd:" + Qid)) != null ? ref.get('label') : void 0; | |
| }); | |
| }; | |
| getPrefixId = function(prefix, id) { | |
| var ref; | |
| if (id == null) { | |
| ref = prefix != null ? prefix.split(':') : void 0, prefix = ref[0], id = ref[1]; | |
| } | |
| if ((prefix != null) && (id != null)) { | |
| return [prefix, id]; | |
| } else { | |
| throw new Error("prefix and id not found for: " + prefix + " / " + id); | |
| } | |
| }; | |
| getModelFromPrefix = function(prefix) { | |
| switch (prefix) { | |
| case 'wd': | |
| return WikidataEntity; | |
| case 'isbn': | |
| return IsbnEntity; | |
| case 'inv': | |
| return InvEntity; | |
| default: | |
| throw new Error("prefix not implemented: " + prefix); | |
| } | |
| }; | |
| saveEntityModel = function(prefix, data) { | |
| if ((data != null ? data.id : void 0) != null) { | |
| return Entities.data[prefix].local.save(data.id, data); | |
| } else { | |
| return _.error(arguments, 'couldnt save entity model'); | |
| } | |
| }; | |
| createEntity = function(data) { | |
| return Entities.data.inv.local.post(data).then(function(entityData) { | |
| var model; | |
| _.type(entityData, 'object'); | |
| if (entityData.isbn != null) { | |
| model = new IsbnEntity(entityData); | |
| } else { | |
| model = new InvEntity(entityData); | |
| } | |
| Entities.add(model); | |
| return model; | |
| }); | |
| }; | |
| getEntityLocalHref = function(domain, id, label) { | |
| var href, possibleId, ref, ref1; | |
| ref = domain != null ? domain.split(':') : void 0, domain = ref[0], possibleId = ref[1]; | |
| if (possibleId != null) { | |
| ref1 = [possibleId, id], id = ref1[0], label = ref1[1]; | |
| } | |
| if ((domain != null ? domain.length : void 0) > 0 && (id != null ? id.length : void 0) > 0) { | |
| href = "/entity/" + domain + ":" + id; | |
| if (label != null) { | |
| label = _.softEncodeURI(label); | |
| href += "/" + label; | |
| } | |
| return href; | |
| } else { | |
| throw new Error("couldnt find EntityLocalHref: domain=" + domain + ", id=" + id + ", label=" + label); | |
| } | |
| }; | |
| normalizeEntityUri = function(prefix, id) { | |
| var ref; | |
| ref = getPrefixId(prefix, id), prefix = ref[0], id = ref[1]; | |
| if (prefix === 'isbn') { | |
| id = books_.normalizeIsbn(id); | |
| } | |
| return prefix + ":" + id; | |
| }; | |
| }); | |
| ;require.register("modules/entities/entities_data", function(exports, require, module) { | |
| var InvData, IsbnData, WdData, books_, wd_; | |
| WdData = require('./lib/wikidata/wikidata_data'); | |
| IsbnData = require('./lib/isbn/isbn_data'); | |
| InvData = require('./lib/inv/inv_data'); | |
| wd_ = require('lib/wikidata'); | |
| books_ = require('lib/books'); | |
| module.exports = function(app, _, promises_) { | |
| var data, get, invData, isbnData, wdData; | |
| wdData = WdData(app, _, wd_, promises_); | |
| isbnData = IsbnData(app, _, books_, promises_); | |
| invData = InvData(app, _); | |
| data = { | |
| wd: wdData, | |
| isbn: isbnData, | |
| inv: invData | |
| }; | |
| get = function(prefix, ids, format, refresh) { | |
| var provider, types; | |
| types = ['string', 'array|string', 'string|undefined', 'boolean']; | |
| _.types(arguments, types, 2); | |
| provider = data[prefix]; | |
| if (provider == null) { | |
| return _.error([prefix, id], 'not implemented prefix, cant getEntityModel'); | |
| } | |
| return provider.local.get(ids, format, refresh); | |
| }; | |
| return data = { | |
| wd: wdData, | |
| isbn: isbnData, | |
| inv: invData, | |
| get: get | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/images", function(exports, require, module) { | |
| var setPictureCredits, wd_; | |
| wd_ = require('lib/wikidata'); | |
| module.exports = { | |
| openLibrary: function(openLibraryId) { | |
| var type; | |
| _.log(openLibraryId, 'ol'); | |
| type = this.type === 'book' ? 'book' : 'author'; | |
| return _.preq.get(app.API.data.openLibraryCover(openLibraryId, type)).then(_.property('url'))["catch"](_.ErrorRethrow('openLibrary')); | |
| }, | |
| wmCommons: function(title) { | |
| _.log(title, 'wm'); | |
| return wd_.wmCommonsThumbData(title, 1000).then((function(_this) { | |
| return function(data) { | |
| var author, license, thumbnail; | |
| thumbnail = data.thumbnail, author = data.author, license = data.license; | |
| setPictureCredits.call(_this, title, author, license); | |
| return thumbnail; | |
| }; | |
| })(this))["catch"](_.ErrorRethrow('wmCommons')); | |
| }, | |
| enWikipedia: function(enWpTitle) { | |
| _.log(enWpTitle, 'wp'); | |
| return wd_.enWpImage(enWpTitle)["catch"](_.ErrorRethrow('enWikipedia')); | |
| } | |
| }; | |
| setPictureCredits = function(title, author, license) { | |
| var text; | |
| if ((author != null) && (license != null)) { | |
| text = author + " - " + license; | |
| } else { | |
| text = author || license; | |
| } | |
| return this.set('pictureCredits', { | |
| url: "https://commons.wikimedia.org/wiki/File:" + title, | |
| text: text | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/inv/entity_data_tests", function(exports, require, module) { | |
| var books_, forms_; | |
| books_ = require('lib/books'); | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = function(data) { | |
| var authors, isbn, title; | |
| title = data.title, authors = data.authors, isbn = data.isbn; | |
| if (!_.isNonEmptyString(title)) { | |
| forms_.throwError('a title is required', '#titleField', data); | |
| } | |
| if (!_.isNonEmptyString(authors)) { | |
| forms_.throwError('an author is required', '#authorsField', data); | |
| } | |
| if (_.isNonEmptyString(isbn)) { | |
| if (!books_.isIsbn(isbn)) { | |
| return forms_.throwError('invalid ISBN', '.entityCreate #isbnField', data); | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/inv/inv_data", function(exports, require, module) { | |
| module.exports = function(app, _) { | |
| var invData, local, remote; | |
| remote = { | |
| get: function(ids) { | |
| return _.preq.get(app.API.entities.inv.get(ids))["catch"](_.Error('inv_data get err')); | |
| }, | |
| post: function(body) { | |
| var url; | |
| url = app.API.entities.inv.create; | |
| return _.preq.post(url, body)["catch"](_.Error('inv_data post err')); | |
| } | |
| }; | |
| local = new app.LocalCache({ | |
| name: 'entities_inv', | |
| remote: remote | |
| }); | |
| return invData = { | |
| local: local, | |
| remote: remote | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/isbn/isbn_data", function(exports, require, module) { | |
| module.exports = function(app, _, books, promises_) { | |
| var isbnData, local, remote; | |
| remote = { | |
| get: books.getIsbnEntities | |
| }; | |
| local = new app.LocalCache({ | |
| name: 'entities_isbn', | |
| normalizeId: books.normalizeIsbn, | |
| remote: remote | |
| }); | |
| return isbnData = { | |
| local: local, | |
| remote: remote | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/wikidata/authors", function(exports, require, module) { | |
| var aliases, fetchAuthorsWorksEntities, fetchAuthorsWorksIds, parseEntities, wd_; | |
| wd_ = require('lib/wikidata'); | |
| aliases = sharedLib('wikidata_aliases'); | |
| module.exports = { | |
| fetchAuthorsWorks: function(authorModel, refresh) { | |
| return fetchAuthorsWorksIds(authorModel, refresh).then(fetchAuthorsWorksEntities.bind(null, authorModel, refresh)).then(parseEntities)["catch"](_.Error('wdAuthors_.fetchAuthorsWorks')); | |
| } | |
| }; | |
| fetchAuthorsWorksIds = function(authorModel, refresh) { | |
| var ref; | |
| if ((!refresh) && (((ref = authorModel.get('reverseClaims')) != null ? ref.P50 : void 0) != null)) { | |
| return _.preq.resolved; | |
| } | |
| return wd_.queryAuthorWorks(authorModel.id, refresh).then(_.Log('worksIds')).then(authorModel.save.bind(authorModel, 'reverseClaims.P50'))["catch"](_.Error('fetchAuthorsWorksIds err')); | |
| }; | |
| fetchAuthorsWorksEntities = function(authorModel, refresh) { | |
| var authorsWorks; | |
| authorsWorks = authorModel.get('reverseClaims.P50'); | |
| _.log(authorsWorks, 'authorsWorks'); | |
| if (!((authorsWorks != null ? authorsWorks.length : void 0) > 0)) { | |
| return _.preq.resolved; | |
| } | |
| authorsWorks = authorsWorks.slice(0, 50); | |
| return app.request('get:entities:models', 'wd', authorsWorks, refresh); | |
| }; | |
| parseEntities = function(entities) { | |
| return { | |
| books: _.compact(entities).filter(wd_.entityIsBook), | |
| articles: _.compact(entities).filter(wd_.entityIsArticle) | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/wikidata/books", function(exports, require, module) { | |
| var books_, requestBookCover, wdBooks_, wd_; | |
| wd_ = require('lib/wikidata'); | |
| books_ = require('lib/books'); | |
| requestBookCover = require('./request_book_cover'); | |
| wdBooks_ = {}; | |
| wdBooks_.findAPictureByBookData = function(bookModel) { | |
| if (bookModel.get('status.imageRequested')) { | |
| return; | |
| } | |
| return requestBookCover(bookModel); | |
| }; | |
| wdBooks_.fetchAuthorsEntities = function(bookModel) { | |
| var authors, label; | |
| authors = bookModel.get('claims.P50'); | |
| if ((authors != null ? authors.length : void 0) > 0) { | |
| return app.request('get:entities:models', 'wd', authors); | |
| } else { | |
| label = bookModel.get('label'); | |
| _.warn("no author found for " + label); | |
| return _.preq.resolved; | |
| } | |
| }; | |
| module.exports = wdBooks_; | |
| }); | |
| ;require.register("modules/entities/lib/wikidata/genre", function(exports, require, module) { | |
| var getReverseClaims, wdGenre_, wd_; | |
| wd_ = require('lib/wikidata'); | |
| module.exports = wdGenre_ = {}; | |
| wdGenre_.fetchBooksAndAuthors = function(genreModel) { | |
| return wdGenre_.fetchBooksAndAuthorsIds(genreModel).then(wdGenre_.fetchBooksAndAuthorsEntities.bind(null, genreModel, null, null))["catch"](_.ErrorRethrow('wdGenre_.fetchBooksAndAuthors')); | |
| }; | |
| wdGenre_.fetchBooksAndAuthorsIds = function(genreModel) { | |
| var P135, P136, reverseClaims; | |
| reverseClaims = genreModel.get('reverseClaims'); | |
| if (reverseClaims != null) { | |
| P135 = reverseClaims.P135, P136 = reverseClaims.P136; | |
| if ((P135 != null) || (P136 != null)) { | |
| return _.preq.resolved; | |
| } | |
| } | |
| return Promise.all([getReverseClaims('P135', genreModel), getReverseClaims('P136', genreModel)]).then(_.flatten)["catch"](_.ErrorRethrow('wdGenre_.fetchBooksAndAuthorsIds')); | |
| }; | |
| getReverseClaims = function(P, genreModel) { | |
| var Q; | |
| Q = genreModel.id; | |
| return wd_.getReverseClaims(P, Q).then(_.uniq).then(_.Log("books and authors ids (" + P + ")")).then(genreModel.save.bind(genreModel, "reverseClaims." + P)); | |
| }; | |
| wdGenre_.fetchBooksAndAuthorsEntities = function(genreModel, limit, offset) { | |
| var first, ids, last, range; | |
| if (limit == null) { | |
| limit = 10; | |
| } | |
| if (offset == null) { | |
| offset = 0; | |
| } | |
| _.types([genreModel, limit, offset], ['object', 'number', 'number']); | |
| ids = _.flatten(genreModel.gets('reverseClaims.P135', 'reverseClaims.P136')); | |
| first = offset; | |
| last = offset + limit; | |
| range = ids.slice(first, last); | |
| if (!(range.length > 0)) { | |
| _.warn('no more ids: range is empty'); | |
| return _.preq.resolved; | |
| } | |
| return app.request('get:entities:models', 'wd', range); | |
| }; | |
| wdGenre_.spreadBooksAndAuthors = function(books, authors, entities) { | |
| var entity, i, len, results; | |
| if (entities == null) { | |
| return _.warn('no entities to spread'); | |
| } | |
| results = []; | |
| for (i = 0, len = entities.length; i < len; i++) { | |
| entity = entities[i]; | |
| switch (wd_.type(entity)) { | |
| case 'book': | |
| results.push(books.add(entity)); | |
| break; | |
| case 'human': | |
| results.push(authors.add(entity)); | |
| break; | |
| default: | |
| results.push(_.warn([entity, entity.get('label'), entity.get('claims.P31')], 'neither a book or a human')); | |
| } | |
| } | |
| return results; | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/wikidata/request_book_cover", function(exports, require, module) { | |
| var attachPictures, books_, findIsbn, getMostAccurateData, getTitleAndAuthor; | |
| books_ = require('lib/books'); | |
| module.exports = function(bookModel) { | |
| var data, entityUri; | |
| data = getMostAccurateData(bookModel); | |
| entityUri = bookModel.get('uri'); | |
| books_.getImage(entityUri, data).then(attachPictures.bind(null, bookModel))["catch"](_.Error('requestBookCover')); | |
| bookModel.set('status.imageRequested', true); | |
| return bookModel.save(); | |
| }; | |
| getMostAccurateData = function(bookModel) { | |
| var isbn; | |
| isbn = findIsbn(bookModel.claims); | |
| if (isbn != null) { | |
| return isbn; | |
| } else { | |
| return getTitleAndAuthor(bookModel); | |
| } | |
| }; | |
| findIsbn = function(claims) { | |
| var isbn, isbn10, isbn13, ref, ref1; | |
| isbn13 = _.stringOnly(claims != null ? (ref = claims.P957) != null ? ref[0] : void 0 : void 0); | |
| isbn10 = _.stringOnly(claims != null ? (ref1 = claims.P212) != null ? ref1[0] : void 0 : void 0); | |
| isbn = isbn13 || isbn10; | |
| if (isbn != null) { | |
| return books_.normalizeIsbn(isbn); | |
| } | |
| }; | |
| getTitleAndAuthor = function(bookModel) { | |
| var authors, ref, title; | |
| title = bookModel.get('label'); | |
| if ((title != null) && (((ref = bookModel.claims) != null ? ref.P50 : void 0) != null)) { | |
| authors = app.request('get:entities:labels', bookModel.claims.P50); | |
| if ((authors != null ? authors[0] : void 0) != null) { | |
| authors = authors.join(' '); | |
| return title + " " + authors; | |
| } | |
| } | |
| }; | |
| attachPictures = function(bookModel, pictures) { | |
| var pics; | |
| _.log(pictures, 'pictures'); | |
| _.types(pictures, 'objects...'); | |
| if (pictures.length > 0) { | |
| pics = bookModel.get('pictures') || []; | |
| pictures = pictures.map(_.property('image')); | |
| bookModel.set('pictures', pictures.concat(pics)); | |
| return bookModel.save(); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/entities/lib/wikidata/wikidata_data", function(exports, require, module) { | |
| module.exports = function(app, _, wd, promises_) { | |
| var local, remote, wdData; | |
| remote = { | |
| get: wd.getEntities | |
| }; | |
| local = new app.LocalCache({ | |
| name: 'entities_wd', | |
| remote: remote, | |
| parseData: _.property('entities') | |
| }); | |
| return wdData = { | |
| local: local, | |
| remote: remote | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/entities/models/entity", function(exports, require, module) { | |
| var customSave, | |
| slice = [].slice; | |
| module.exports = Backbone.NestedModel.extend({ | |
| initLazySave: function() { | |
| var lazySave; | |
| lazySave = _.debounce(customSave.bind(this), 100); | |
| return this.save = function() { | |
| var args; | |
| args = 1 <= arguments.length ? slice.call(arguments, 0) : []; | |
| this.set.apply(this, args); | |
| lazySave(); | |
| return this; | |
| }; | |
| }, | |
| updateMetadata: function() { | |
| return _.preq.start.then(this.executeMetadataUpdate.bind(this)); | |
| }, | |
| executeMetadataUpdate: function() { | |
| var ref, ref1; | |
| return app.execute('metadata:update', { | |
| title: this.buildBookTitle(), | |
| description: (ref = this.findBestDescription()) != null ? ref.slice(0, 501) : void 0, | |
| image: (ref1 = this.get('pictures')) != null ? ref1[0] : void 0, | |
| url: this.get('canonical') | |
| }); | |
| }, | |
| findBestDescription: function() { | |
| return this.get('description'); | |
| }, | |
| buildBookTitle: function() { | |
| var title; | |
| title = this.get('title'); | |
| return (title + " - ") + _.I18n('book'); | |
| } | |
| }); | |
| customSave = function() { | |
| return app.request('save:entity:model', this.prefix, this.toJSON()); | |
| }; | |
| }); | |
| ;require.register("modules/entities/models/inv_entity", function(exports, require, module) { | |
| var Entity, parseAuthors; | |
| Entity = require('./entity'); | |
| module.exports = Entity.extend({ | |
| prefix: 'inv', | |
| initialize: function() { | |
| var canonical, pathname, title; | |
| this.initLazySave(); | |
| this.id = this.get('_id'); | |
| canonical = pathname = "/entity/" + this.prefix + ":" + this.id; | |
| if (title = this.get('title')) { | |
| pathname += "/" + _.softEncodeURI(title); | |
| } | |
| return this.set({ | |
| canonical: canonical, | |
| pathname: pathname, | |
| uri: this.prefix + ":" + this.id, | |
| domain: 'inv' | |
| }); | |
| }, | |
| getAuthorsString: function() { | |
| var authors, str; | |
| authors = this.get('authors'); | |
| str = (function() { | |
| switch (_.typeOf(authors)) { | |
| case 'string': | |
| return authors; | |
| case 'array': | |
| return parseAuthors(authors); | |
| } | |
| })(); | |
| return _.preq.resolve(str); | |
| } | |
| }); | |
| parseAuthors = function(authors) { | |
| return authors.map(_.property('value')).join(', '); | |
| }; | |
| }); | |
| ;require.register("modules/entities/models/isbn_entity", function(exports, require, module) { | |
| var Entity, books_, parseAuthor; | |
| Entity = require('./entity'); | |
| books_ = require('lib/books'); | |
| module.exports = Entity.extend({ | |
| prefix: 'isbn', | |
| initialize: function() { | |
| var canonical, isbn, pathname, title; | |
| this.initLazySave(); | |
| this.id = this.get('id'); | |
| isbn = this.get('isbn'); | |
| if (isbn == null) { | |
| throw new Error("isbn entity doesn't have an isbn: " + (this.get('uri'))); | |
| } | |
| this.uri = this.get('uri') || ("isbn:" + isbn); | |
| canonical = pathname = "/entity/" + this.uri; | |
| this.findAPicture(); | |
| if (title = this.get('title')) { | |
| pathname += "/" + _.softEncodeURI(title); | |
| } | |
| return this.set({ | |
| canonical: canonical, | |
| pathname: pathname, | |
| domain: 'isbn', | |
| uri: this.uri | |
| }); | |
| }, | |
| findAPicture: function() { | |
| var pictures; | |
| pictures = this.get('pictures'); | |
| if (_.isEmpty(pictures)) { | |
| return this._fetchPicture(); | |
| } else { | |
| return this.set('pictures', pictures.map(books_.uncurl)); | |
| } | |
| }, | |
| _fetchPicture: function() { | |
| return books_.getImage(this.uri).then((function(_this) { | |
| return function(images) { | |
| return _this.set('pictures', images.map(_.property('image'))); | |
| }; | |
| })(this))["catch"](_.Error('findAPicture')); | |
| }, | |
| getAuthorsString: function() { | |
| var str; | |
| str = this.get('authors').map(parseAuthor).join(', '); | |
| _.log(str, 'isbn author'); | |
| return _.preq.resolve(str); | |
| } | |
| }); | |
| parseAuthor = function(a) { | |
| switch (a.type) { | |
| case 'wikidata_id': | |
| return a.label; | |
| case 'string': | |
| return a.value; | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/entities/models/wikidata_entity", function(exports, require, module) { | |
| var Entity, error_, getEntityValue, getLangPriorityOrder, images_, wdAuthors_, wdBooks_, wd_; | |
| Entity = require('./entity'); | |
| wd_ = require('lib/wikidata'); | |
| wdBooks_ = require('modules/entities/lib/wikidata/books'); | |
| wdAuthors_ = require('modules/entities/lib/wikidata/books'); | |
| error_ = require('lib/error'); | |
| images_ = require('../lib/images'); | |
| module.exports = Entity.extend({ | |
| idAttribute: 'id', | |
| prefix: 'wd', | |
| initialize: function() { | |
| var lang, ref; | |
| this.initLazySave(); | |
| this._updates = {}; | |
| if (!((ref = this.get('status')) != null ? ref.formatted : void 0)) { | |
| if (Entities.byUri('wd:#{@id}') != null) { | |
| console.warn("reformatting " + this.id + " while it was already cached! Probably because the server returned fresh data (ex: during entity search)"); | |
| } | |
| lang = app.user.lang; | |
| this.setWikiLinks(lang); | |
| this.setWikipediaExtract(lang); | |
| this._updates.sitelinks = {}; | |
| this.rebaseClaims(); | |
| this.setAttributes(this.attributes, lang); | |
| this.type = wd_.type(this._updates); | |
| this.findAPicture(); | |
| this.set(this._updates); | |
| this._updates = null; | |
| this.set('status.formatted', true); | |
| this.save(); | |
| } | |
| if (this.waitForExtract == null) { | |
| this.waitForExtract = _.preq.resolved; | |
| } | |
| if (this.waitForPicture == null) { | |
| this.waitForPicture = _.preq.resolved; | |
| } | |
| this.waitForData = Promise.all([this.waitForExtract, this.waitForPicture]); | |
| this.claims = this.get('claims'); | |
| this.wikidata = true; | |
| return this.typeSpecificInitilize(); | |
| }, | |
| rebaseClaims: function() { | |
| var claims, publicationDate, ref; | |
| claims = this.get('claims'); | |
| if (claims != null) { | |
| claims = wdk.simplifyClaims(claims); | |
| this._updates.claims = claims = wd_.aliasingClaims(claims); | |
| this.originalLang = wd_.getOriginalLang(claims); | |
| publicationDate = (ref = claims.P577) != null ? ref[0] : void 0; | |
| if (publicationDate != null) { | |
| this.publicationYear = _.getYearFromEpoch(publicationDate); | |
| } | |
| } | |
| }, | |
| setAttributes: function(attrs, lang) { | |
| var description, label, pathname, ref, ref1; | |
| pathname = "/entity/wd:" + this.id; | |
| this._updates.canonical = pathname; | |
| label = getEntityValue(attrs, 'labels', lang, this.originalLang); | |
| if (label == null) { | |
| label = (ref = this._updates.wikipedia) != null ? (ref1 = ref.title) != null ? ref1.replace(/\s\(\w+\)/, '') : void 0 : void 0; | |
| } | |
| if (label != null) { | |
| this._updates.label = label; | |
| this._updates.title = label; | |
| pathname += "/" + _.softEncodeURI(label); | |
| } | |
| this._updates.pathname = pathname; | |
| this._updates.domain = 'wd'; | |
| description = getEntityValue(attrs, 'descriptions', lang, this.originalLang); | |
| if (description != null) { | |
| this._updates.description = description; | |
| } | |
| this._updates.reverseClaims = {}; | |
| }, | |
| setWikiLinks: function(lang) { | |
| var ref, ref1, ref2, sitelinks; | |
| this._updates.wikidata = { | |
| url: "https://www.wikidata.org/entity/" + this.id, | |
| wiki: "https://www.wikidata.org/wiki/" + this.id | |
| }; | |
| this._updates.uri = "wd:" + this.id; | |
| this.originalLang = (ref = this._updates.claims) != null ? (ref1 = ref.P364) != null ? ref1[0] : void 0 : void 0; | |
| sitelinks = this.get('sitelinks'); | |
| if (sitelinks != null) { | |
| this.enWpTitle = (ref2 = sitelinks.enwiki) != null ? ref2.title : void 0; | |
| this._updates.wikipedia = wd_.sitelinks.wikipedia(sitelinks, lang); | |
| this._updates.wikisource = wd_.sitelinks.wikisource(sitelinks, lang); | |
| } | |
| }, | |
| setWikipediaExtract: function(lang) { | |
| var ref, ref1, title; | |
| title = (ref = this.get('sitelinks')) != null ? (ref1 = ref[lang + "wiki"]) != null ? ref1.title : void 0 : void 0; | |
| if (title != null) { | |
| this.waitForExtract = wd_.wikipediaExtract(lang, title).then((function(_this) { | |
| return function(extract) { | |
| if (extract != null) { | |
| _this.set('extract', extract); | |
| return _this.save(); | |
| } | |
| }; | |
| })(this))["catch"](_.Error('getWikipediaExtract err')); | |
| } | |
| }, | |
| findAPicture: function() { | |
| var commonsImage, openLibraryId, pictures, ref, ref1, ref2, ref3; | |
| this._updates.pictures = pictures = []; | |
| this.save(); | |
| openLibraryId = (ref = this._updates.claims) != null ? (ref1 = ref.P648) != null ? ref1[0] : void 0 : void 0; | |
| commonsImage = (ref2 = this._updates.claims) != null ? (ref3 = ref2.P18) != null ? ref3[0] : void 0 : void 0; | |
| return this.waitForPicture = this._pickBestPic(openLibraryId, commonsImage); | |
| }, | |
| _pickBestPic: function(openLibraryId, commonsImage) { | |
| var candidates, getters, order; | |
| getters = {}; | |
| if (openLibraryId != null) { | |
| getters.ol = images_.openLibrary.bind(this, openLibraryId); | |
| } | |
| if (commonsImage != null) { | |
| getters.wm = images_.wmCommons.bind(this, commonsImage); | |
| } | |
| if (this.enWpTitle != null) { | |
| getters.wp = images_.enWikipedia.bind(this, this.enWpTitle); | |
| } | |
| if (this.type === 'human') { | |
| order = ['wm', 'ol', 'wp']; | |
| } else { | |
| if ((this.publicationYear != null) && this.publicationYear < _.yearsAgo(70)) { | |
| order = ['ol', 'wm', 'wp']; | |
| } else { | |
| order = ['ol', 'wp', 'wm']; | |
| } | |
| } | |
| candidates = _.values(_.pick(getters, order)); | |
| if (candidates.length === 0) { | |
| return _.preq.resolved; | |
| } | |
| return _.preq.fallbackChain(candidates).then(this._savePicture.bind(this))["catch"](_.Error('_pickBestPic err')); | |
| }, | |
| _savePicture: function(url) { | |
| this.push('pictures', url); | |
| return this.save(); | |
| }, | |
| typeSpecificInitilize: function() { | |
| switch (this.type) { | |
| case 'book': | |
| return this.initializeBook(); | |
| case 'human': | |
| return this.initializeAuthor(); | |
| } | |
| }, | |
| initializeBook: function() { | |
| return wdBooks_.fetchAuthorsEntities(this).then(this.findAPictureIfMissing.bind(this))["catch"](_.Error('fetchAuthorsEntities err')); | |
| }, | |
| findAPictureIfMissing: function() { | |
| return this.waitForPicture.then((function(_this) { | |
| return function() { | |
| if (_this.get('pictures').length === 0) { | |
| return wdBooks_.findAPictureByBookData(_this); | |
| } | |
| }; | |
| })(this)); | |
| }, | |
| initializeAuthor: function() {}, | |
| updateMetadata: function() { | |
| return this.waitForData.then(this.executeMetadataUpdate.bind(this))["catch"](_.Error('updateMetadata err')); | |
| }, | |
| executeMetadataUpdate: function() { | |
| var ref, ref1; | |
| return app.execute('metadata:update', { | |
| title: this.findBestTitle(), | |
| description: (ref = this.findBestDescription()) != null ? ref.slice(0, 501) : void 0, | |
| image: (ref1 = this.get('pictures')) != null ? ref1[0] : void 0, | |
| url: this.get('canonical') | |
| }); | |
| }, | |
| findBestTitle: function() { | |
| var title; | |
| title = this.get('title'); | |
| switch (this.type) { | |
| case 'human': | |
| return _.i18n('books_by_author', { | |
| author: title | |
| }); | |
| case 'book': | |
| return this.buildBookTitle(); | |
| default: | |
| return title; | |
| } | |
| }, | |
| findBestDescription: function() { | |
| var description, extract; | |
| extract = this.get('extract'); | |
| description = this.get('description'); | |
| if ((extract != null) && extract.length > 300) { | |
| return extract; | |
| } else { | |
| return description || extract; | |
| } | |
| }, | |
| getAuthorsString: function() { | |
| var qids; | |
| qids = this.claims.P50; | |
| return wd_.getLabel(qids, app.user.lang); | |
| } | |
| }); | |
| getEntityValue = function(attrs, props, lang, originalLang) { | |
| var nextLang, order, property, ref, value; | |
| property = attrs[props]; | |
| if (property != null) { | |
| order = getLangPriorityOrder(lang, originalLang, property); | |
| while (order.length > 0) { | |
| nextLang = order.shift(); | |
| value = (ref = property[nextLang]) != null ? ref.value : void 0; | |
| if (value != null) { | |
| return value; | |
| } | |
| } | |
| } | |
| }; | |
| getLangPriorityOrder = function(lang, originalLang, property) { | |
| var availableLangs, order; | |
| order = [lang]; | |
| if (originalLang != null) { | |
| order.push(originalLang); | |
| } | |
| order.push('en'); | |
| availableLangs = Object.keys(property); | |
| return _.uniq(order.concat(availableLangs)); | |
| }; | |
| }); | |
| ;require.register("modules/entities/views/article_li", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/article_li'), | |
| tagName: 'li', | |
| className: 'articleLi', | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.toJSON(); | |
| attrs.wikidata.customStyle = true; | |
| return _.extend(attrs, { | |
| href: this.getHref(), | |
| hasDate: this.hasDate() | |
| }); | |
| }, | |
| getHref: function() { | |
| var DOI, ref, ref1; | |
| DOI = (ref = this.model.get('claims')) != null ? (ref1 = ref.P356) != null ? ref1[0] : void 0 : void 0; | |
| if (DOI != null) { | |
| return "https://dx.doi.org/" + DOI; | |
| } | |
| }, | |
| hasDate: function() { | |
| var ref, ref1; | |
| return ((ref = this.model.get('claims')) != null ? (ref1 = ref.P577) != null ? ref1[0] : void 0 : void 0) != null; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/author_li", function(exports, require, module) { | |
| var WorksList, behaviorsPlugin, wdAuthors_, wikiBarPlugin; | |
| wdAuthors_ = require('modules/entities/lib/wikidata/authors'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| wikiBarPlugin = require('modules/general/plugins/wiki_bar'); | |
| WorksList = require('./works_list'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/author_li'), | |
| tagName: 'li', | |
| className: 'authorLi', | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| regions: { | |
| booksRegion: '.books', | |
| articlesRegion: '.articles' | |
| }, | |
| initialize: function() { | |
| this.initPlugins(); | |
| this.books = new Backbone.Collection; | |
| this.articles = new Backbone.Collection; | |
| this.lazyRender = _.LazyRender(this); | |
| this.$el.once('inview', this.fetchBooks.bind(this)); | |
| this.listenTo(this.model, 'change', this.lazyRender.bind(this)); | |
| if (this.options.standalone) { | |
| return app.execute('metadata:update:needed'); | |
| } | |
| }, | |
| initPlugins: function() { | |
| _.extend(this, behaviorsPlugin); | |
| if (this.options.standalone) { | |
| return wikiBarPlugin.call(this); | |
| } | |
| }, | |
| events: { | |
| 'click .refreshData': 'refreshData' | |
| }, | |
| modelEvents: { | |
| 'add:pictures': 'lazyRender' | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.toJSON(), { | |
| standalone: this.options.standalone, | |
| canRefreshData: true, | |
| hideWikisourceEpub: true | |
| }); | |
| }, | |
| fetchBooks: function() { | |
| var refresh; | |
| refresh = this.options.refresh === true; | |
| this.startLoading(); | |
| return wdAuthors_.fetchAuthorsWorks(this.model, refresh).then(this.addToCollections.bind(this))["catch"](_.Error('author_li fetchBooks err'))["finally"](this.stopLoading.bind(this)); | |
| }, | |
| addToCollections: function(works) { | |
| var articles, books; | |
| books = works.books, articles = works.articles; | |
| if (!((books != null) || (articles != null))) { | |
| return _.warn('no work found for #{@model.title}'); | |
| } | |
| this.books.add(books); | |
| this.articles.add(articles); | |
| if (this.articles.length > 0) { | |
| return this.showArticles(); | |
| } | |
| }, | |
| onRender: function() { | |
| this.showBooks(); | |
| if (this.options.standalone) { | |
| return this.model.updateMetadata()["finally"](app.execute.bind(app, 'metadata:update:done')); | |
| } | |
| }, | |
| showBooks: function() { | |
| return this.booksRegion.show(new WorksList({ | |
| collection: this.books, | |
| type: 'books' | |
| })); | |
| }, | |
| showArticles: function() { | |
| return this.articlesRegion.show(new WorksList({ | |
| collection: this.articles, | |
| type: 'articles' | |
| })); | |
| }, | |
| refreshData: function() { | |
| return app.execute('show:entity:refresh', this.model); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/book_li", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/book_li'), | |
| tagName: 'li', | |
| className: 'bookLi', | |
| initialize: function() { | |
| this.listenTo(this.model, 'change', this.render); | |
| this.listenTo(this.model, 'add:pictures', this.render); | |
| return app.execute('qlabel:update'); | |
| }, | |
| behaviors: { | |
| PreventDefault: {}, | |
| PlainTextAuthorLink: {} | |
| }, | |
| ui: { | |
| zoomButtons: '.zoom-button .buttons span', | |
| cover: 'img' | |
| }, | |
| events: { | |
| 'click a.addToInventory': 'showItemCreationForm', | |
| 'click a.zoom-button': 'toggleZoom' | |
| }, | |
| showItemCreationForm: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:item:creation:form', { | |
| entity: this.model | |
| }); | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = _.extend(this.model.toJSON(), { | |
| counter: this.counter() | |
| }); | |
| if (attrs.extract != null) { | |
| attrs.description = attrs.extract; | |
| } | |
| return attrs; | |
| }, | |
| counter: function() { | |
| var count, counter; | |
| count = app.request('items:count:byEntity', this.model.get('uri')); | |
| return counter = { | |
| count: count, | |
| highlight: count > 0 | |
| }; | |
| }, | |
| toggleZoom: function() { | |
| _.invertAttr(this.ui.cover, 'src', 'data-zoom-toggle'); | |
| this.ui.zoomButtons.toggle(); | |
| return this.$el.toggleClass('zoom', { | |
| duration: 500 | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/entity_actions", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/entity_actions'), | |
| className: 'entityActions', | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| this.uri = this.model.get('uri'); | |
| return this.mainUserInstances = app.request('item:main:user:instances', this.uri); | |
| }, | |
| serializeData: function() { | |
| return { | |
| transactions: this.transactionsData(), | |
| mainUserHasOne: this.mainUserHasOne(), | |
| mainUserInstances: this.mainUserInstances, | |
| instances: { | |
| count: this.mainUserInstances.length, | |
| pathname: this.mainUserInstancesPathname() | |
| } | |
| }; | |
| }, | |
| transactionsData: function() { | |
| var transactions; | |
| transactions = Items.transactions(); | |
| transactions.inventorying.icon = 'plus'; | |
| transactions.inventorying.label = 'just_inventorize_it'; | |
| return transactions; | |
| }, | |
| onRender: function() { | |
| return app.execute('foundation:reload'); | |
| }, | |
| events: { | |
| 'click #addToInventory, #inventorying': 'inventorying', | |
| 'click #giving': 'giving', | |
| 'click #lending': 'lending', | |
| 'click #selling': 'selling', | |
| 'click .hasAnInstance a': 'showMainUserInstances' | |
| }, | |
| giving: function() { | |
| return this.showItemCreation('giving'); | |
| }, | |
| lending: function() { | |
| return this.showItemCreation('lending'); | |
| }, | |
| selling: function() { | |
| return this.showItemCreation('selling'); | |
| }, | |
| inventorying: function() { | |
| return this.showItemCreation('inventorying'); | |
| }, | |
| showItemCreation: function(transaction) { | |
| if (this.model.delegateItemCreation) { | |
| this.model.trigger('delegate:item:creation', transaction); | |
| return _.log('delegating item creation'); | |
| } else { | |
| return app.execute('show:item:creation:form', { | |
| entity: this.model, | |
| transaction: transaction | |
| }); | |
| } | |
| }, | |
| mainUserHasOne: function() { | |
| return this.mainUserInstances.length > 0; | |
| }, | |
| showMainUserInstances: function() { | |
| return app.execute('show:items', this.mainUserInstances); | |
| }, | |
| mainUserInstancesPathname: function() { | |
| var uri, username; | |
| uri = this.uri; | |
| username = app.user.get('username'); | |
| return "/inventory/" + username + "/" + uri; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/entity_create", function(exports, require, module) { | |
| var EntityActions, PicturePicker, books_, entityDataTests, forms_; | |
| books_ = require('lib/books'); | |
| forms_ = require('modules/general/lib/forms'); | |
| entityDataTests = require('../lib/inv/entity_data_tests'); | |
| EntityActions = require('./entity_actions'); | |
| PicturePicker = require('modules/general/views/behaviors/picture_picker'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/entity_create'), | |
| className: function() { | |
| if (this.options.standalone) { | |
| return 'entityCreate standalone'; | |
| } else { | |
| return 'entityCreate'; | |
| } | |
| }, | |
| regions: { | |
| entityActions: '#entityActions' | |
| }, | |
| events: { | |
| 'click #addPicture': 'addPicture' | |
| }, | |
| ui: { | |
| title: '#titleField', | |
| authors: '#authorsField', | |
| isbn: '#isbnField' | |
| }, | |
| behaviors: { | |
| AlertBox: {}, | |
| BackupForm: {} | |
| }, | |
| initialize: function() { | |
| return this.initModel(); | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.toJSON(), { | |
| header: this.getHeader(), | |
| titleField: this.fieldData('title', 'ex: Hamlet'), | |
| authorsField: this.fieldData('authors', 'ex: William Shakespeare'), | |
| isbnField: this.fieldData('isbn', 'ex: 978-2070368228'), | |
| standalone: this.options.standalone | |
| }); | |
| }, | |
| getHeader: function() { | |
| var header; | |
| header = "let's just create the book card"; | |
| if (this.options.secondChoice) { | |
| header = "otherwise, " + header; | |
| } | |
| if (this.options.standalone) { | |
| header = "this book isnt in the database: " + header; | |
| } | |
| return _.i18n(header); | |
| }, | |
| fieldData: function(attr, placeholder) { | |
| return { | |
| id: attr, | |
| value: this.model.get(attr), | |
| placeholder: placeholder | |
| }; | |
| }, | |
| initModel: function() { | |
| this.model = new Backbone.Model; | |
| this.model.set('pictures', []); | |
| this.listenTo(this.model, 'change:pictures', this.render); | |
| this.model.delegateItemCreation = true; | |
| return this.listenTo(this.model, 'delegate:item:creation', this.showItemCreation.bind(this)); | |
| }, | |
| updateModel: function(attr) { | |
| var val; | |
| val = this.ui[attr].val(); | |
| return this.model.set(attr, val); | |
| }, | |
| onRender: function() { | |
| return this.showEntityActions(); | |
| }, | |
| onShow: function() { | |
| this.prefillForm(); | |
| if (this.options.standalone) { | |
| return this.ui.title.focus(); | |
| } | |
| }, | |
| prefillForm: function() { | |
| var data; | |
| data = this.options.data; | |
| if (data != null) { | |
| if (books_.isIsbn(data)) { | |
| this.ui.isbn.val(data); | |
| return this.model.set('isbn', data); | |
| } else { | |
| this.ui.title.val(data); | |
| return this.model.set('title', data); | |
| } | |
| } | |
| }, | |
| addPicture: function() { | |
| var picturePicker; | |
| picturePicker = new PicturePicker({ | |
| pictures: this.model.get('pictures'), | |
| limit: 1, | |
| save: this.model.set.bind(this.model, 'pictures') | |
| }); | |
| return app.layout.modal.show(picturePicker); | |
| }, | |
| showItemCreation: function(transaction) { | |
| return _.preq.start.then(this.createEntity.bind(this)).then(this.showItemCreationForm.bind(this, transaction))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| createEntity: function() { | |
| var entityData; | |
| this.updateModel('title'); | |
| this.updateModel('authors'); | |
| this.updateModel('isbn'); | |
| entityData = this.normalizeEntityData(); | |
| return app.request('create:entity', entityData); | |
| }, | |
| normalizeEntityData: function() { | |
| var authors, entity, entityData, isbn, pictures, title; | |
| entityData = this.model.toJSON(); | |
| entityDataTests(entityData); | |
| title = entityData.title, authors = entityData.authors, isbn = entityData.isbn, pictures = entityData.pictures; | |
| if (authors.trim() === '') { | |
| authors = null; | |
| } | |
| if (isbn.trim() === '') { | |
| isbn = null; | |
| } | |
| entity = { | |
| title: title.trim(), | |
| authors: authors != null ? authors.split(',').map(function(str) { | |
| return str.trim(); | |
| }) : void 0, | |
| pictures: pictures | |
| }; | |
| if (isbn != null) { | |
| entity.isbn = books_.normalizeIsbn(isbn); | |
| } | |
| return _.log(entity, 'entity?'); | |
| }, | |
| showItemCreationForm: function(transaction, entityModel) { | |
| return app.execute('show:item:creation:form', { | |
| entity: entityModel, | |
| transaction: transaction | |
| }); | |
| }, | |
| showEntityActions: function() { | |
| return this.entityActions.show(new EntityActions({ | |
| model: this.model | |
| })); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/entity_data", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/entity_data'), | |
| className: 'entityData', | |
| initialize: function(options) { | |
| this.lazyRender = _.LazyRender(this); | |
| this.listenTo(this.model, 'change', this.lazyRender); | |
| this.hidePicture = options.hidePicture; | |
| if (!this.hidePicture) { | |
| return this.listenTo(this.model, 'add:pictures', this.lazyRender); | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.toJSON(); | |
| attrs = this.setDescriptionAttributes(attrs); | |
| attrs.entityPage = this.options.entityPage; | |
| attrs.hidePicture = this.hidePicture; | |
| return attrs; | |
| }, | |
| ui: { | |
| description: '.description', | |
| togglers: '.toggler i' | |
| }, | |
| behaviors: { | |
| PreventDefault: {}, | |
| PlainTextAuthorLink: {} | |
| }, | |
| onRender: function() { | |
| return app.execute('qlabel:update'); | |
| }, | |
| events: { | |
| 'click .toggler': 'toggleDescLength' | |
| }, | |
| toggleDescLength: function() { | |
| this.ui.description.toggleClass('clamped'); | |
| return this.ui.togglers.toggleClass('hidden'); | |
| }, | |
| setDescriptionAttributes: function(attrs) { | |
| if (attrs.extract != null) { | |
| attrs.description = attrs.extract; | |
| } | |
| if (attrs.description != null) { | |
| attrs.descOverflow = attrs.description.length > 400; | |
| } | |
| return attrs; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/entity_show", function(exports, require, module) { | |
| var EntityActions, EntityData, ItemsList, backMessage, fetchPublicItems, showItems, spreadPublicData, wikiBarPlugin; | |
| EntityData = require('./entity_data'); | |
| EntityActions = require('./entity_actions'); | |
| wikiBarPlugin = require('modules/general/plugins/wiki_bar'); | |
| ItemsList = require('modules/inventory/views/items_list'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/entity_show'), | |
| regions: { | |
| entityData: '#entityData', | |
| entityActions: '#entityActions', | |
| localItems: '#localItems', | |
| publicItems: '#publicItems' | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.toJSON(), { | |
| back: backMessage(), | |
| canRefreshData: true | |
| }); | |
| }, | |
| initialize: function() { | |
| this.initPlugins(); | |
| this.uri = this.model.get('uri'); | |
| fetchPublicItems(this.uri); | |
| return app.execute('metadata:update:needed'); | |
| }, | |
| initPlugins: function() { | |
| return wikiBarPlugin.call(this); | |
| }, | |
| onShow: function() { | |
| this.showEntityData(); | |
| app.request('waitForUserData').then(this.showEntityActions.bind(this)); | |
| if (app.user.loggedIn) { | |
| this.showLocalItems(); | |
| } | |
| this.showPublicItems(); | |
| return this.model.updateMetadata()["finally"](app.execute.bind(app, 'metadata:update:done')); | |
| }, | |
| events: { | |
| 'click a.showWikipediaPreview': 'toggleWikipediaPreview', | |
| 'click #toggleWikiediaPreview': 'toggleWikiediaPreview', | |
| 'click .refreshData': 'refreshData' | |
| }, | |
| showEntityData: function() { | |
| return this.entityData.show(new EntityData({ | |
| model: this.model, | |
| entityPage: true | |
| })); | |
| }, | |
| showEntityActions: function() { | |
| return this.entityActions.show(new EntityActions({ | |
| model: this.model | |
| })); | |
| }, | |
| showLocalItems: function() { | |
| return showItems(Items.network, this.localItems, this.uri); | |
| }, | |
| showPublicItems: function() { | |
| return showItems(Items["public"], this.publicItems, this.uri); | |
| }, | |
| toggleWikipediaPreview: function() { | |
| return this.$el.trigger('toggleWikiIframe', this); | |
| }, | |
| refreshData: function() { | |
| return app.execute('show:entity:refresh', this.model); | |
| } | |
| }); | |
| showItems = function(baseCollection, region, uri) { | |
| var items; | |
| items = baseCollection.filtered.resetFilters().filteredByEntityUri(uri); | |
| return region.show(new ItemsList({ | |
| collection: items | |
| })); | |
| }; | |
| backMessage = function() { | |
| if (_.lastRouteMatch(/search\?/)) { | |
| return { | |
| message: _.i18n('back to search results') | |
| }; | |
| } | |
| }; | |
| fetchPublicItems = function(uri) { | |
| return app.request('get:entity:public:items', uri).then(_.Log('public items')).then(spreadPublicData)["catch"](_.Error('fetchPublicItems')); | |
| }; | |
| spreadPublicData = function(data) { | |
| app.execute('users:public:add', data.users); | |
| return Items["public"].add(data.items); | |
| }; | |
| }); | |
| ;require.register("modules/entities/views/genre_data", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'genreData', | |
| template: require('./templates/genre_data'), | |
| initialize: function() { | |
| return this.listenTo(this.model, 'change', this.render.bind(this)); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/genre_layout", function(exports, require, module) { | |
| var Entities, GenreData, ResultsList, behaviorsPlugin, wdGenre_, wd_, wikiBarPlugin; | |
| wd_ = require('lib/wikidata'); | |
| wdGenre_ = require('modules/entities/lib/wikidata/genre'); | |
| Entities = require('modules/entities/collections/entities'); | |
| ResultsList = require('modules/search/views/results_list'); | |
| wikiBarPlugin = require('modules/general/plugins/wiki_bar'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| GenreData = require('./genre_data'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'genreLayout', | |
| template: require('./templates/genre_layout'), | |
| regions: { | |
| genreRegion: '#genre', | |
| authorsRegion: '#authors', | |
| booksRegion: '#books' | |
| }, | |
| ui: { | |
| headerBg: '.headerBg' | |
| }, | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| initialize: function() { | |
| this.initPlugins(); | |
| this.initCollections(); | |
| this.fetchBooksAndAuthors(); | |
| return this.fetchAndSetHeaderBackground(); | |
| }, | |
| initPlugins: function() { | |
| wikiBarPlugin.call(this); | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| initCollections: function() { | |
| this.books = new Entities; | |
| return this.authors = new Entities; | |
| }, | |
| fetchBooksAndAuthors: function() { | |
| return wdGenre_.fetchBooksAndAuthors(this.model).then(wdGenre_.spreadBooksAndAuthors.bind(null, this.books, this.authors))["catch"](_.Error('fetchBooksAndAuthors')).then(this.stopLoading.bind(this)).then(this.fetchAndSetHeaderBackground.bind(this)).then(this.blockLoader.bind(this)); | |
| }, | |
| blockLoader: function() { | |
| return this._dataFetched = true; | |
| }, | |
| fetchAndSetHeaderBackground: function() { | |
| var wmCommonsFile; | |
| if (!this._headerBackgroundSet) { | |
| wmCommonsFile = this.findPicture(); | |
| if (wmCommonsFile != null) { | |
| this._headerBackgroundSet = true; | |
| return wd_.wmCommonsThumb(wmCommonsFile, window.screen.width).then(this.setHeaderBackground.bind(this))["catch"](_.Error('fetchAndSetHeaderBackground')); | |
| } | |
| } | |
| }, | |
| findPicture: function() { | |
| return this.findModelFirstPicture() || this.findEntitiesFirstPicture(); | |
| }, | |
| findModelFirstPicture: function() { | |
| var ref; | |
| return (ref = this.model.get('claims.P18')) != null ? ref[0] : void 0; | |
| }, | |
| findEntitiesFirstPicture: function() { | |
| var images; | |
| if (this.books != null) { | |
| images = this.books.map(function(entity) { | |
| var pics; | |
| pics = entity.get('claims.P18'); | |
| return pics != null ? pics[0] : void 0; | |
| }); | |
| return _.compact(images)[0]; | |
| } | |
| }, | |
| setHeaderBackground: function(url) { | |
| this.headerBgUrl = url; | |
| if (this.isRendered) { | |
| return this.showHeaderBackground(); | |
| } | |
| }, | |
| onRender: function() { | |
| if (!this._dataFetched) { | |
| this.startLoading(); | |
| } | |
| this.showHeaderBackground(); | |
| this.showGenreData(); | |
| return this.showResults(); | |
| }, | |
| showHeaderBackground: function() { | |
| if (this.headerBgUrl != null) { | |
| this.ui.headerBg.css('background-image', "url(" + this.headerBgUrl + ")"); | |
| return this.$el.addClass('with-bg-image'); | |
| } | |
| }, | |
| showGenreData: function() { | |
| return this.genreRegion.show(new GenreData({ | |
| model: this.model | |
| })); | |
| }, | |
| showResults: function() { | |
| var collection, i, len, ref, region, results, type; | |
| ref = ['authors', 'books']; | |
| results = []; | |
| for (i = 0, len = ref.length; i < len; i++) { | |
| type = ref[i]; | |
| collection = this[type]; | |
| region = this[type + "Region"]; | |
| results.push(region.show(new ResultsList({ | |
| collection: collection, | |
| type: type, | |
| hideIfEmpty: true | |
| }))); | |
| } | |
| return results; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/entities/views/templates/article_li", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div>\n <img src='" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.pictures : depth0),150,{"name":"src","hash":{},"data":data})) | |
| + "' alt='" | |
| + alias3(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + "'>\n</div>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"link",(depth0 != null ? depth0.href : depth0),(depth0 != null ? depth0.title : depth0),{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " " | |
| + container.escapeExpression(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"title","hash":{},"data":data}) : helper))) | |
| + "\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| return " <span class=\"date\">\n (" | |
| + container.escapeExpression((helpers.timeClaim || (depth0 && depth0.timeClaim) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.claims : depth0),"P577","year",true,true,{"name":"timeClaim","hash":{},"data":data})) | |
| + " ) \n </span>\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper; | |
| return " <p class=\"grey\">" | |
| + ((stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"description","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "</p>\n"; | |
| },"11":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : {}, alias3=helpers.helperMissing; | |
| return " <a href=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.wikisource : depth0)) != null ? stack1.url : stack1), depth0)) | |
| + "\" target=\"_blank\" title=\"" | |
| + alias1((helpers.I18n || (depth0 && depth0.I18n) || alias3).call(alias2,"read online",{"name":"I18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,"wikisource",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"13":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : {}, alias3=helpers.helperMissing; | |
| return " <a href=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.wikipedia : depth0)) != null ? stack1.url : stack1), depth0)) | |
| + "\" target=\"_blank\" title=\"" | |
| + alias1((helpers.I18n || (depth0 && depth0.I18n) || alias3).call(alias2,"see on Wikipedia",{"name":"I18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,"wikipedia",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.pictures : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<div class=\"main\">\n <h4>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.href : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(5, data, 0),"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.hasDate : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </h4>\n\n\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n <p>\n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P50",true,false,true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.stringClaim || (depth0 && depth0.stringClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P2093",true,true,true,{"name":"stringClaim","hash":{},"data":data})) | |
| + " \n </p>\n\n</div>\n<div class=\"right-bar\">\n <span class=\"fa fa-file-text-o\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"article_limitation",{"name":"i18n","hash":{},"data":data})) | |
| + "\"></span>\n <div class=\"sitelinks\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:edit_wikidata",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikisource : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikipedia : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/author_claims", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class='wiki-attributes'>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:birth_death_dates",(depth0 != null ? depth0.claims : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:edit_wikidata",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n <p class=\"claims\">\n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P135",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P136",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P27",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P103",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P69",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P106",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P166",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P39",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P1066",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P737",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P738",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.urlClaim || (depth0 && depth0.urlClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P856",{"name":"urlClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.platformClaim || (depth0 && depth0.platformClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P1938",{"name":"platformClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.platformClaim || (depth0 && depth0.platformClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P2002",{"name":"platformClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.platformClaim || (depth0 && depth0.platformClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P2013",{"name":"platformClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.platformClaim || (depth0 && depth0.platformClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P2003",{"name":"platformClaim","hash":{},"data":data})) | |
| + " \n </p>\n " | |
| + alias3((helpers.imageClaim || (depth0 && depth0.imageClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P109",{"name":"imageClaim","hash":{},"data":data})) | |
| + " \n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/author_li", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <img src='" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.pictures : depth0),600,{"name":"src","hash":{},"data":data})) | |
| + "' alt='" | |
| + alias3(((helper = (helper = helpers.label || (depth0 != null ? depth0.label : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"label","hash":{},"data":data}) : helper))) | |
| + " cover'>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:wikipedia_iframe",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:embedded_welcome",{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div class=\"innerAuthorLi\">\n <div class='infobox'>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.pictures : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <div class=\"authorData text-center\">\n <h3><a class=\"showEntity\" href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">" | |
| + alias4(((helper = (helper = helpers.label || (depth0 != null ? depth0.label : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data}) : helper))) | |
| + "</a></h3>\n <h4 class=\"subheader\">" | |
| + alias4(((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) | |
| + "</h4>\n " | |
| + alias4((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:author_claims",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n <p class=\"extract\">" | |
| + ((stack1 = ((helper = (helper = helpers.extract || (depth0 != null ? depth0.extract : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"extract","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "</p>\n " | |
| + alias4((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:photo_credits",(depth0 != null ? depth0.pictureCredits : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n </div>\n\n <div class=\"works\">\n <div class='books'></div>\n <div class='articles'></div>\n </div>\n</div>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.standalone : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/birth_death_dates", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " \n<p>\n " | |
| + alias3((helpers.timeClaim || (depth0 && depth0.timeClaim) || alias2).call(alias1,depth0,"P569","year",true,true,{"name":"timeClaim","hash":{},"data":data})) | |
| + "\n - \n " | |
| + alias3((helpers.timeClaim || (depth0 && depth0.timeClaim) || alias2).call(alias1,depth0,"P570","year",true,{"name":"timeClaim","hash":{},"data":data})) | |
| + "\n</p>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.P569 : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/book_claims", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:edit_wikidata",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n<div class='wiki-attributes'>\n <p class=\"claims\">\n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P1680",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.stringClaim || (depth0 && depth0.stringClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P1476",{"name":"stringClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P364",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P50",true,null,true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + ((stack1 = (helpers.joinAuthors || (depth0 && depth0.joinAuthors) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.claims : depth0)) != null ? stack1.P2093 : stack1),{"name":"joinAuthors","hash":{},"data":data})) != null ? stack1 : "") | |
| + "<br> \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P110",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.timeClaim || (depth0 && depth0.timeClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P577",{"name":"timeClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P155",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P156",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P136",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P135",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P921",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P840",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P674",{"name":"claim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.urlClaim || (depth0 && depth0.urlClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P856",{"name":"urlClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.urlClaim || (depth0 && depth0.urlClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P953",{"name":"urlClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.platformClaim || (depth0 && depth0.platformClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P2034",{"name":"platformClaim","hash":{},"data":data})) | |
| + " \n " | |
| + alias3((helpers.platformClaim || (depth0 && depth0.platformClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P2002",{"name":"platformClaim","hash":{},"data":data})) | |
| + " \n </p>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/book_li", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"zoom-button\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.pictures : depth0),200,400,{"name":"src","hash":{},"data":data})) | |
| + "\"\n data-zoom-toggle=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.pictures : depth0),500,1000,{"name":"src","hash":{},"data":data})) | |
| + "\"\n alt='" | |
| + alias3(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + " cover'>\n <span class=\"buttons\">\n <span>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"search-plus",{"name":"icon","hash":{},"data":data})) | |
| + "</span>\n <span class=\"hidden\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"search-minus",{"name":"icon","hash":{},"data":data})) | |
| + "</span>\n </span>\n </a>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper; | |
| return " <p class=\"clamped grey\">" | |
| + ((stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"description","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "</p>\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <p>\n " | |
| + alias3((helpers.claim || (depth0 && depth0.claim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P50",true,{"name":"claim","hash":{},"data":data})) | |
| + " \n </p>\n <p class=\"date\">\n " | |
| + alias3((helpers.timeClaim || (depth0 && depth0.timeClaim) || alias2).call(alias1,(depth0 != null ? depth0.claims : depth0),"P577","year",true,{"name":"timeClaim","hash":{},"data":data})) | |
| + " \n </p>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing; | |
| return " <p class=\"isbn-attributes\">\n " | |
| + ((stack1 = (helpers.P || (depth0 && depth0.P) || alias2).call(alias1,"50",{"name":"P","hash":{},"data":data})) != null ? stack1 : "") | |
| + " " | |
| + ((stack1 = (helpers.joinAuthors || (depth0 && depth0.joinAuthors) || alias2).call(alias1,(depth0 != null ? depth0.authors : depth0),{"name":"joinAuthors","hash":{},"data":data})) != null ? stack1 : "") | |
| + " <br>\n </p>\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| return "highlight"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div class=\"bookCover\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.pictures : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n<div class=\"bookLiData\">\n <h3><a class='showEntity' href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">" | |
| + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + "</a></h3>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikidata : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "") | |
| + "</div>\n\n<div class='actions'>\n <a class='showEntity' href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-right",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"more details",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n <a class='addToInventory' href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "/add\" rel=\"nofollow\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"plus",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"add to my inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n <div class=\"counters\">\n <a class='showEntity counter " | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.counter : depth0)) != null ? stack1.highlight : stack1),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "' href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">\n <span class=\"count\">" | |
| + alias4(container.lambda(((stack1 = (depth0 != null ? depth0.counter : depth0)) != null ? stack1.count : stack1), depth0)) | |
| + "</span>\n </a>\n " | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"network_counter_label",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/edit_wikidata", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "class=\"editWikidata\""; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : {}, alias3=helpers.helperMissing; | |
| return "<a href=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.wikidata : depth0)) != null ? stack1.wiki : stack1), depth0)) | |
| + "\" " | |
| + ((stack1 = helpers.unless.call(alias2,((stack1 = (depth0 != null ? depth0.wikidata : depth0)) != null ? stack1.customStyle : stack1),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " title=\"" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || alias3).call(alias2,"edit data on Wikidata",{"name":"i18n","hash":{},"data":data})) | |
| + "\" target=\"_blank\">" | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,"pencil",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/entity_actions", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " <p class=\"hasAnInstance\">\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"item_existing_instances",(depth0 != null ? depth0.instances : depth0),{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n </p>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <li><a id=\"" | |
| + alias3(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + " <span>" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,(depth0 != null ? depth0.label : depth0),{"name":"I18n","hash":{},"data":data})) | |
| + "</span></a></li>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.mainUserHasOne : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<div class=\"entityAction\">\n <div class=\"custom-button-group\">\n <a id='addToInventory' class=\"has-tip button success bold\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"add it to my inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"plus",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"add it to my inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n <a class=\"button success\" data-options=\"is_hover:true\" data-dropdown=\"have\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-down",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n <ul id=\"have\" class=\"small f-dropdown\" data-dropdown-content>\n <li class=\"dropdownLegend\">\n <label>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"I have it and it is available for:",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n </li>\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.transactions : depth0),{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </ul>\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/entity_create", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return " <img src=\"" | |
| + container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},depth0,300,{"name":"src","hash":{},"data":data})) | |
| + "\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<form class=\"entityCreateForm\">\n <div class=\"fields\">\n <h3>" | |
| + alias3(((helper = (helper = helpers.header || (depth0 != null ? depth0.header : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"header","hash":{},"data":data}) : helper))) | |
| + "</h3>\n <h4>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"title",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:needed",{"name":"partial","hash":{},"data":data})) | |
| + "</h4>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"text_field",(depth0 != null ? depth0.titleField : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n\n <h4>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"P50",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:needed",{"name":"partial","hash":{},"data":data})) | |
| + "</h4>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"text_field",(depth0 != null ? depth0.authorsField : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n\n <h4>ISBN</h4>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"text_field",(depth0 != null ? depth0.isbnField : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n <div class=\"pics\">\n <div class=\"pictures\">\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.pictures : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <a id=\"addPicture\" class=\"button\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"camera",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"add a picture",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n</form>\n\n<div id=\"entityActions\"></div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/entity_data", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.pictures : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"cover\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.pictures : depth0),300,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias3(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"cover",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"entities:photo_credits",(depth0 != null ? depth0.pictureCredits : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " <h2>" | |
| + container.escapeExpression(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"title","hash":{},"data":data}) : helper))) | |
| + "</h2>\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <h2><a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"showEntity\">" | |
| + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + "</a></h2>\n"; | |
| },"8":function(container,depth0,helpers,partials,data) { | |
| return "clamped"; | |
| },"10":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class='toggler'>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-up","hidden",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"12":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"entities:book_claims",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"14":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return " <p class=\"isbn-attributes\">\n " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.authors : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.publishedDate : depth0),{"name":"if","hash":{},"fn":container.program(17, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.publisher : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.pageCount : depth0),{"name":"if","hash":{},"fn":container.program(21, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n </p>\n"; | |
| },"15":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing; | |
| return " " | |
| + ((stack1 = (helpers.P || (depth0 && depth0.P) || alias2).call(alias1,"50",{"name":"P","hash":{},"data":data})) != null ? stack1 : "") | |
| + " " | |
| + ((stack1 = (helpers.joinAuthors || (depth0 && depth0.joinAuthors) || alias2).call(alias1,(depth0 != null ? depth0.authors : depth0),{"name":"joinAuthors","hash":{},"data":data})) != null ? stack1 : "") | |
| + " <br> "; | |
| },"17":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing; | |
| return ((stack1 = (helpers.P || (depth0 && depth0.P) || alias2).call(alias1,"P577",{"name":"P","hash":{},"data":data})) != null ? stack1 : "") | |
| + " " | |
| + container.escapeExpression((helpers.dateYear || (depth0 && depth0.dateYear) || alias2).call(alias1,(depth0 != null ? depth0.publishedDate : depth0),{"name":"dateYear","hash":{},"data":data})) | |
| + " <br> "; | |
| },"19":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<span>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"publisher",{"name":"i18n","hash":{},"data":data})) | |
| + ":</span>" | |
| + alias3(((helper = (helper = helpers.publisher || (depth0 != null ? depth0.publisher : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"publisher","hash":{},"data":data}) : helper))) | |
| + " <br> "; | |
| },"21":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<span>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pages",{"name":"i18n","hash":{},"data":data})) | |
| + ":</span>" | |
| + alias3(((helper = (helper = helpers.pageCount || (depth0 != null ? depth0.pageCount : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"pageCount","hash":{},"data":data}) : helper))) | |
| + " <br> "; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function"; | |
| return ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.hidePicture : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n<div class=\"data\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.entityPage : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : "") | |
| + " <p class=\"uri\">" | |
| + container.escapeExpression(((helper = (helper = helpers.uri || (depth0 != null ? depth0.uri : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"uri","hash":{},"data":data}) : helper))) | |
| + "</p>\n\n <p class=\"description " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.descOverflow : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n " | |
| + ((stack1 = ((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "\n </p>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.descOverflow : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <div class=\"attributes\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikidata : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.program(14, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/entity_show", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"back",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"entities:wikipedia_iframe",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<section class=\"entityShow custom-column\">\n <p class=\"back\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.back : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </p>\n <div class='dark-panel'>\n <div id=\"entityData\"></div>\n <div id=\"entityActions\"></div>\n <div class='check'></div>\n </div>\n\n <div class=\"allItems\">\n <h3 class=\"subheader publicHeader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"your friends' and groups' books",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <div id=\"localItems\" class=\"items\"></div>\n <h3 class=\"subheader publicHeader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"public books",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <div id=\"publicItems\" class=\"items\"></div>\n </div>\n\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikidata : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</section>\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:embedded_welcome",{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/genre_data", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function"; | |
| return "<h2 class=\"title\">" | |
| + container.escapeExpression(((helper = (helper = helpers.label || (depth0 != null ? depth0.label : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"label","hash":{},"data":data}) : helper))) | |
| + "</h2>\n<p class=\"extract\">" | |
| + ((stack1 = ((helper = (helper = helpers.extract || (depth0 != null ? depth0.extract : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"extract","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "</p>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/genre_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"restBg\"></div>\n<div class=\"headerBg\"></div>\n<section id=\"genre\"></section>\n<span class=\"loading\"></span>\n<section id=\"authors\"></section>\n<section id=\"books\"></section>\n" | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"entities:wikipedia_iframe",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/needed", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<span class=\"needed\">(" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"needed",{"name":"i18n","hash":{},"data":data})) | |
| + ")</span>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/photo_credits", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"photo credits:",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,(depth0 != null ? depth0.text : depth0),(depth0 != null ? depth0.url : depth0),"link",{"name":"link","hash":{},"data":data})) | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return "<p class=\"photo-credits\">\n" | |
| + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.text : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</p>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/wikipedia_iframe", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"wikipediaPreviewToggler\">\n <a class=\"showWikipediaPreview\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"on_wikipedia",depth0,{"name":"i18n","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-up","hidden",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n </div>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return "<div class=\"wikipedia-iframe\">\n <div class=\"wiki-menu-bar\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikipedia : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(alias1,"wiki_sitelinks",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/templates/works_list", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"displayMore\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-down",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"more",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return "<div class=\"header\">\n <h3>" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.title : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</h3><span class=\"counter\"></span>\n</div>\n<ul class=\"container\"></ul>\n<div class=\"more\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.more : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <span class=\"loading\"></span>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/entities/views/works_list", function(exports, require, module) { | |
| var paginationPlugin, strings; | |
| paginationPlugin = require('modules/general/plugins/pagination'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| template: require('./templates/works_list'), | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| childViewContainer: '.container', | |
| getChildView: function() { | |
| if (this.options.type === 'articles') { | |
| return require('./article_li'); | |
| } else { | |
| return require('./book_li'); | |
| } | |
| }, | |
| emptyView: require('modules/inventory/views/no_item'), | |
| ui: { | |
| counter: '.counter' | |
| }, | |
| initialize: function() { | |
| this.initPlugins(); | |
| this.collection = this.options.collection; | |
| return this.initBookCounter(); | |
| }, | |
| initPlugins: function() { | |
| return paginationPlugin.call(this, { | |
| batchLength: 15, | |
| initialLength: this.options.initialLength || 5 | |
| }); | |
| }, | |
| initBookCounter: function() { | |
| this.lazyUpdateBookCounter = _.debounce(this.updateBookCounter.bind(this), 1000); | |
| return this.listenTo(this.collection, 'add remove', this.lazyUpdateBookCounter); | |
| }, | |
| events: { | |
| 'click a.displayMore': 'displayMore' | |
| }, | |
| collectionEvents: { | |
| 'add': 'lazyRender' | |
| }, | |
| serializeData: function() { | |
| return _.extend({}, strings[this.options.type], { | |
| more: this.more(), | |
| canRefreshData: true | |
| }); | |
| }, | |
| onRender: function() { | |
| return this.lazyUpdateBookCounter(); | |
| }, | |
| updateBookCounter: function() { | |
| var base, count; | |
| count = this.collection.length; | |
| return typeof (base = this.ui.counter).text === "function" ? base.text(count).hide().slideDown() : void 0; | |
| } | |
| }); | |
| strings = { | |
| books: { | |
| title: 'books' | |
| }, | |
| articles: { | |
| title: 'articles' | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/general/behaviors/alertbox", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| ui: { | |
| hasAlertbox: ".has-alertbox" | |
| }, | |
| events: { | |
| 'alert': 'showAlertBox', | |
| 'hideAlertBox': 'hideAlertBox', | |
| 'keydown': 'hideAlertBox', | |
| 'click a.close': 'hideAlertBox', | |
| 'click .button': 'hideAlertBox' | |
| }, | |
| showAlertBox: function(e, params) { | |
| var $parent, $target, box, message, selector; | |
| message = params.message, selector = params.selector; | |
| if (message == null) { | |
| _.error(params, 'couldnt display the alertbox with those params'); | |
| return; | |
| } | |
| if (selector != null) { | |
| if (!/\.|#/.test(selector)) { | |
| _.error(selector, 'invalid selector'); | |
| } | |
| $target = $(selector); | |
| } else { | |
| $target = this.ui.hasAlertbox; | |
| } | |
| box = "<div class='alert hidden alert-box'>" + message + " <a class='close'>×</a> </div>"; | |
| $parent = $target.parent(); | |
| $parent.find('.alert-box').remove(); | |
| $parent.append(box); | |
| $parent.find('.alert-box').slideDown(500); | |
| return this._showAlertTimestamp = _.now(); | |
| }, | |
| hideAlertBox: function() { | |
| if (!((this._showAlertTimestamp != null) && !_.expired(this._showAlertTimestamp, 1000))) { | |
| return this.$el.find('.alert-box').hide(); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/backup_form", function(exports, require, module) { | |
| var buildIdSelector, buildNameSelector, customRecover; | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'change input, textarea': 'backup' | |
| }, | |
| initialize: function() { | |
| return this._backup = { | |
| byId: {}, | |
| byName: {} | |
| }; | |
| }, | |
| backup: function(e) { | |
| var id, name, ref, type, value; | |
| ref = e.currentTarget, id = ref.id, value = ref.value, type = ref.type, name = ref.name; | |
| if (!_.isNonEmptyString(value)) { | |
| return; | |
| } | |
| if (!(type === 'text' || type === 'textarea')) { | |
| return; | |
| } | |
| if (_.isNonEmptyString(id)) { | |
| return this._backup.byId[id] = value; | |
| } else if (_.isNonEmptyString(name)) { | |
| return this._backup.byName[name] = value; | |
| } | |
| }, | |
| recover: function() { | |
| _.log(this._backup, 'recovering form data'); | |
| customRecover(this.$el, this._backup.byId, buildIdSelector); | |
| return customRecover(this.$el, this._backup.byName, buildNameSelector); | |
| }, | |
| onRender: function() { | |
| return this.recover(); | |
| } | |
| }); | |
| customRecover = function($el, store, selectorBuilder) { | |
| var key, results, selector, value; | |
| results = []; | |
| for (key in store) { | |
| value = store[key]; | |
| _.log(value, key); | |
| selector = selectorBuilder(key); | |
| results.push($el.find(selector).val(value)); | |
| } | |
| return results; | |
| }; | |
| buildIdSelector = function(id) { | |
| return "#" + id; | |
| }; | |
| buildNameSelector = function(name) { | |
| return "[name='" + name + "']"; | |
| }; | |
| }); | |
| ;require.register("modules/general/behaviors/base", function(exports, require, module) { | |
| module.exports = { | |
| initialize: function() { | |
| return Marionette.Behaviors.behaviorsLookup = function() { | |
| return app.Behaviors; | |
| }; | |
| }, | |
| General: require('./general'), | |
| AlertBox: require('./alertbox'), | |
| ConfirmationModal: require('./confirmation_modal'), | |
| Loading: require('./loading'), | |
| SuccessCheck: require('./success_check'), | |
| TogglePassword: require('./toggle_password'), | |
| PreventDefault: require('./prevent_default'), | |
| ElasticTextarea: require('./elastic_textarea'), | |
| BackupForm: require('./backup_form'), | |
| LocalSeachBar: require('./local_seach_bar'), | |
| PlainTextAuthorLink: require('./plain_text_author_link'), | |
| Unselect: require('./unselect') | |
| }; | |
| }); | |
| ;require.register("modules/general/behaviors/confirmation_modal", function(exports, require, module) { | |
| var ConfirmationModal; | |
| ConfirmationModal = require('../views/behaviors/confirmation_modal'); | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'askConfirmation': 'askConfirmation' | |
| }, | |
| askConfirmation: function(e, options) { | |
| return app.layout.modal.show(new ConfirmationModal(options)); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/elastic_textarea", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| ui: { | |
| textarea: "textarea" | |
| }, | |
| onRender: function() { | |
| return autosize(this.ui.textarea); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/general", function(exports, require, module) { | |
| var enterClick, moveCaretToEnd; | |
| moveCaretToEnd = require('modules/general/lib/move_caret_to_end'); | |
| enterClick = require('modules/general/lib/enter_click'); | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'submit form': function(e) { | |
| return e.preventDefault(); | |
| }, | |
| 'focus textarea': moveCaretToEnd, | |
| 'keyup input.enterClick': enterClick.input, | |
| 'keyup textarea.ctrlEnterClick': enterClick.textarea, | |
| 'keyup a.button': enterClick.button, | |
| 'click a.back': function() { | |
| return window.history.back(); | |
| }, | |
| 'click #home, .showHome': function() { | |
| return app.execute('show:home'); | |
| }, | |
| 'click .showWelcome': function() { | |
| return app.execute('show:welcome'); | |
| }, | |
| 'click .showLogin': function() { | |
| return app.execute('show:login'); | |
| }, | |
| 'click .showInventory': function() { | |
| return app.execute('show:inventory'); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/loading", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| ui: { | |
| loading: '.loading, .check' | |
| }, | |
| events: { | |
| 'loading': 'showSpinningLoader', | |
| 'stopLoading': 'hideSpinningLoader', | |
| 'somethingWentWrong': 'somethingWentWrong' | |
| }, | |
| showSpinningLoader: function(e, params) { | |
| var body, cb, mes, timeout; | |
| this.$target = this.getTarget(params); | |
| body = _.icon('circle-o-notch', 'fa-spin'); | |
| if ((params != null ? params.message : void 0) != null) { | |
| mes = params.message; | |
| body += "<p class='grey'>" + mes + "</p>"; | |
| } | |
| this.$target.html(body); | |
| timeout = (params != null ? params.timeout : void 0) || 16; | |
| if (timeout !== 'none') { | |
| cb = this.somethingWentWrong.bind(this, null, params); | |
| return setTimeout(cb, timeout * 1000); | |
| } | |
| }, | |
| hideSpinningLoader: function(e, params) { | |
| this.$target || (this.$target = this.getTarget(params)); | |
| this.$target.empty(); | |
| return this.hidden = true; | |
| }, | |
| somethingWentWrong: function(e, params) { | |
| var body, oups; | |
| if (!this.hidden) { | |
| this.$target || (this.$target = this.getTarget(params)); | |
| oups = _.i18n('Something went wrong :('); | |
| body = _.icon('bolt') + ("<p> " + oups + "</p>"); | |
| return this.$target.html(body); | |
| } | |
| }, | |
| getTarget: function(params) { | |
| if ((params != null ? params.selector : void 0) != null) { | |
| return $(params.selector).find('.loading'); | |
| } else { | |
| return this.ui.loading; | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/local_seach_bar", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| ui: { | |
| localSearchField: '#localSearchField' | |
| }, | |
| events: { | |
| 'click a#localSearchButton': 'search', | |
| 'inview #localSearchGroup': 'toggleGlobalSearchBar' | |
| }, | |
| onShow: function() { | |
| return this.updateSearchBar(); | |
| }, | |
| search: function() { | |
| app.execute('search:global', this.ui.localSearchField.val()); | |
| return app.execute('last:add:mode:set', 'search'); | |
| }, | |
| updateSearchBar: function() { | |
| return this.ui.localSearchField.val(this.view.query); | |
| }, | |
| toggleGlobalSearchBar: function(e, isInView) { | |
| if (isInView) { | |
| return app.vent.trigger('search:global:hide'); | |
| } else { | |
| return app.vent.trigger('search:global:show', this.ui.localSearchField.val()); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/plain_text_author_link", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'click .searchAuthor': 'searchAuthor' | |
| }, | |
| searchAuthor: function(e) { | |
| var author; | |
| author = e.target.firstChild.textContent; | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('search:global', author); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/prevent_default", function(exports, require, module) { | |
| var smartPreventDefault; | |
| smartPreventDefault = require('modules/general/lib/smart_prevent_default'); | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'click a': 'smartPreventDefault' | |
| }, | |
| smartPreventDefault: smartPreventDefault | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/success_check", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'check': 'showSuccessCheck', | |
| 'fail': 'showFail' | |
| }, | |
| showSuccessCheck: function(e, cb) { | |
| return this.showSignal(e, cb, 'check-circle'); | |
| }, | |
| showFail: function(e, cb) { | |
| return this.showSignal(e, cb, 'times-circle'); | |
| }, | |
| showSignal: function(e, cb, signal) { | |
| var $check, $wrapper, afterTimeout; | |
| $wrapper = $(e.target).parents('.checkWrapper'); | |
| if ($wrapper.length === 1) { | |
| $check = $wrapper.find('.check'); | |
| } else { | |
| $check = $(e.target).find('.check'); | |
| } | |
| if ($check.length !== 1) { | |
| return _.warn('.check target not found'); | |
| } | |
| $check.hide().html(_.icon(signal, 'text-center')).slideDown(300); | |
| afterTimeout = function() { | |
| $check.slideUp(); | |
| if (cb != null) { | |
| return cb(); | |
| } | |
| }; | |
| return setTimeout(afterTimeout, 600); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/toggle_password", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| ui: { | |
| showPassword: '.showPassword' | |
| }, | |
| initialize: function() { | |
| return this.passwordShown = false; | |
| }, | |
| events: { | |
| 'click .showPassword': 'togglePassword' | |
| }, | |
| togglePassword: function() { | |
| if (this.passwordShown) { | |
| return this.passwordType('password'); | |
| } else { | |
| return this.passwordType('text'); | |
| } | |
| }, | |
| passwordType: function(type) { | |
| var el; | |
| el = this.view.ui.passwords || this.view.ui.password; | |
| el.attr('type', type); | |
| this.ui.showPassword.toggleClass('toggled'); | |
| return this.passwordShown = !this.passwordShown; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/behaviors/unselect", function(exports, require, module) { | |
| module.exports = Marionette.Behavior.extend({ | |
| events: { | |
| 'click .unselect': 'unselect' | |
| }, | |
| unselect: function() { | |
| return app.execute('show:inventory:general'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/collections/imgs", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| model: require('../models/img') | |
| }); | |
| }); | |
| ;require.register("modules/general/lib/active_langs", function(exports, require, module) { | |
| var alternateLangs, territorialize; | |
| territorialize = { | |
| de: 'de_DE', | |
| es: 'es_ES', | |
| fr: 'fr_FR', | |
| pl: 'pl_PL', | |
| sv: 'sv_SE' | |
| }; | |
| alternateLangs = Object.keys(territorialize); | |
| territorialize.en = 'en_US'; | |
| module.exports = { | |
| alternateLangs: alternateLangs, | |
| territorialize: territorialize | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/document_lang", function(exports, require, module) { | |
| var alternateLangs, origin, ref, setHreflang, territorialize, updateBodyLang, updateHeadAlternateLangs; | |
| origin = location.origin; | |
| ref = require('./active_langs'), alternateLangs = ref.alternateLangs, territorialize = ref.territorialize; | |
| exports.keepBodyLangUpdated = function() { | |
| updateBodyLang.call(this, app.request('i18n:current')); | |
| return this.listenTo(app.vent, 'i18n:set', updateBodyLang.bind(this)); | |
| }; | |
| updateBodyLang = function(lang) { | |
| return this.$el.attr('lang', lang); | |
| }; | |
| exports.keepHeadAlternateLangsUpdated = function() { | |
| return updateHeadAlternateLangs(null, _.currentRoute()); | |
| }; | |
| updateHeadAlternateLangs = function(section, route) { | |
| var i, lang, len, results; | |
| setHreflang(route, false, 'en'); | |
| results = []; | |
| for (i = 0, len = alternateLangs.length; i < len; i++) { | |
| lang = alternateLangs[i]; | |
| results.push(setHreflang(route, true, lang)); | |
| } | |
| return results; | |
| }; | |
| setHreflang = function(route, withLangQueryString, lang) { | |
| var href; | |
| href = origin + "/" + route; | |
| if (withLangQueryString) { | |
| href = _.setQuerystring(href, 'lang', lang); | |
| } | |
| return $("head link[hreflang='" + lang + "']").attr('href', href); | |
| }; | |
| exports.updateOgLocalAlternates = function() { | |
| var i, lang, len, local, otherTerritories, results, territory; | |
| lang = app.request('i18n:current'); | |
| local = territorialize[lang]; | |
| $('head').append("<meta property='og:locale' content='" + local + "' />"); | |
| otherTerritories = _.values(_.omit(territorialize, lang)); | |
| results = []; | |
| for (i = 0, len = otherTerritories.length; i < len; i++) { | |
| territory = otherTerritories[i]; | |
| results.push($('head').append("<meta property='og:locale:alternate' content='" + territory + "' />")); | |
| } | |
| return results; | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/dynamic_background", function(exports, require, module) { | |
| var coverBgRoots, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = function() { | |
| var setBackgroundFromRoute, setCoverBg, setNormalBg; | |
| setCoverBg = this.ui.bg.addClass.bind(this.ui.bg, 'cover'); | |
| setNormalBg = this.ui.bg.removeClass.bind(this.ui.bg, 'cover'); | |
| setBackgroundFromRoute = function(section) { | |
| if (indexOf.call(coverBgRoots, section) >= 0) { | |
| return setCoverBg(); | |
| } else { | |
| return setNormalBg(); | |
| } | |
| }; | |
| setBackgroundFromRoute(_.currentSection()); | |
| app.vent.on('route:change', setBackgroundFromRoute); | |
| return app.commands.setHandlers({ | |
| 'background:cover': setCoverBg, | |
| 'background:normal': setNormalBg | |
| }); | |
| }; | |
| coverBgRoots = ['login', 'settings', 'signup', 'welcome']; | |
| }); | |
| ;require.register("modules/general/lib/enter_click", function(exports, require, module) { | |
| var clickTarget; | |
| module.exports = { | |
| input: function(e) { | |
| var row; | |
| if (e.keyCode === 13 && $(e.currentTarget).val().length > 0) { | |
| row = $(e.currentTarget).parents('form, .inputGroup')[0]; | |
| return clickTarget($(row).find('.button, .tiny-button, .saveButton')); | |
| } | |
| }, | |
| textarea: function(e) { | |
| var $el; | |
| if (e.keyCode === 13 && e.ctrlKey) { | |
| $el = $(e.currentTarget); | |
| if ($el.val().length > 0) { | |
| return clickTarget($el.parents('form').first().find('.sendMessage, .postComment')); | |
| } | |
| } | |
| }, | |
| button: function(e) { | |
| if (e.keyCode === 13) { | |
| return $(e.currentTarget).trigger('click'); | |
| } | |
| } | |
| }; | |
| clickTarget = function($target) { | |
| if ($target.length > 0) { | |
| return $target.trigger('click'); | |
| } else { | |
| return _.error('target not found'); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/forms", function(exports, require, module) { | |
| var forms_, | |
| slice = [].slice; | |
| module.exports = forms_ = {}; | |
| forms_.pass = function(options) { | |
| var err, results, selector, test, tests, value; | |
| value = options.value, tests = options.tests, selector = options.selector; | |
| _.types([value, tests, selector], ['string', 'object', 'string']); | |
| results = []; | |
| for (err in tests) { | |
| test = tests[err]; | |
| if (test(value)) { | |
| results.push(forms_.throwError(err, selector, value)); | |
| } else { | |
| results.push(void 0); | |
| } | |
| } | |
| return results; | |
| }; | |
| forms_.earlyVerify = function(view, e, verificator) { | |
| var ref; | |
| if (((ref = $(e.target)) != null ? ref.val() : void 0) !== '') { | |
| return _.preq.start.then(verificator)["catch"](forms_.catchAlert.bind(null, view)); | |
| } | |
| }; | |
| forms_.catchAlert = function(view, err) { | |
| if (err.selector != null) { | |
| view.$el.trigger('stopLoading'); | |
| return forms_.alert(view, err); | |
| } else { | |
| view.$el.trigger('somethingWentWrong'); | |
| return _.error(err, 'catchAlert err'); | |
| } | |
| }; | |
| forms_.alert = function(view, err) { | |
| var errMessage, ref, selector; | |
| selector = err.selector; | |
| errMessage = ((ref = err.responseJSON) != null ? ref.status_verbose : void 0) || err.message; | |
| _.types([view, err, selector, errMessage], ['object', 'object', 'string', 'string']); | |
| if (/^\d/.test(errMessage)) { | |
| errMessage = 'something went wrong :('; | |
| } | |
| _.log(errMessage, "alert message on " + selector); | |
| return view.$el.trigger('alert', { | |
| message: _.i18n(errMessage), | |
| selector: selector | |
| }); | |
| }; | |
| forms_.throwError = function() { | |
| var context, err, message, selector; | |
| message = arguments[0], selector = arguments[1], context = 3 <= arguments.length ? slice.call(arguments, 2) : []; | |
| err = new Error(message); | |
| err.selector = selector; | |
| err.context = context; | |
| throw err; | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/head_metadata", function(exports, require, module) { | |
| var applyTransformers, host, metaNodes, metadataUpdate, metadataUpdateDone, metadataUpdateNeeded, possibleFields, transformers, translateMetadata, updateMetadata, updateNodeContent, updateTitle, withTransformers, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| host = require('lib/urls').host; | |
| metadataUpdate = function(key, value) { | |
| var k, results, updates, v; | |
| _.log(arguments, 'metadataUpdate'); | |
| updates = _.forceObject(key, value); | |
| results = []; | |
| for (k in updates) { | |
| v = updates[k]; | |
| results.push(updateMetadata(k, v)); | |
| } | |
| return results; | |
| }; | |
| updateMetadata = function(key, value, noCompletion) { | |
| var el, i, len, ref, results; | |
| if (indexOf.call(possibleFields, key) < 0) { | |
| return _.error([key, value], 'invalid metadata data'); | |
| } | |
| if (value == null) { | |
| _.warn("missing metadata value: " + key); | |
| return; | |
| } | |
| if (key === 'title') { | |
| app.execute('track:page:view', value); | |
| } | |
| value = applyTransformers(key, value, noCompletion); | |
| ref = metaNodes[key]; | |
| results = []; | |
| for (i = 0, len = ref.length; i < len; i++) { | |
| el = ref[i]; | |
| results.push(updateNodeContent(value, el)); | |
| } | |
| return results; | |
| }; | |
| updateNodeContent = function(value, el) { | |
| var attribute, selector; | |
| selector = el.selector, attribute = el.attribute; | |
| attribute || (attribute = 'content'); | |
| return document.querySelector(selector)[attribute] = value; | |
| }; | |
| updateTitle = function(title, noCompletion) { | |
| return updateMetadata('title', title, noCompletion); | |
| }; | |
| metaNodes = { | |
| title: [ | |
| { | |
| selector: 'title', | |
| attribute: 'text' | |
| }, { | |
| selector: "[property='og:title']" | |
| }, { | |
| selector: "[name='twitter:title']" | |
| } | |
| ], | |
| description: [ | |
| { | |
| selector: "[property='og:description']" | |
| }, { | |
| selector: "[name='twitter:description']" | |
| } | |
| ], | |
| image: [ | |
| { | |
| selector: "[property='og:image']" | |
| }, { | |
| selector: "[name='twitter:image']" | |
| } | |
| ], | |
| url: [ | |
| { | |
| selector: "[property='og:url']" | |
| }, { | |
| selector: "[rel='canonical']", | |
| attribute: 'href' | |
| } | |
| ] | |
| }; | |
| applyTransformers = function(key, value, noCompletion) { | |
| if (indexOf.call(withTransformers, key) >= 0) { | |
| return transformers[key](value, noCompletion); | |
| } else { | |
| return value; | |
| } | |
| }; | |
| possibleFields = Object.keys(metaNodes); | |
| transformers = { | |
| title: function(value, noCompletion) { | |
| if (noCompletion) { | |
| return value; | |
| } else { | |
| return value + " - Inventaire"; | |
| } | |
| }, | |
| url: function(canonical) { | |
| return host + canonical; | |
| }, | |
| image: function(url) { | |
| return host + app.API.img(url); | |
| } | |
| }; | |
| withTransformers = Object.keys(transformers); | |
| metadataUpdateNeeded = function() { | |
| return window.prerenderReady = false; | |
| }; | |
| metadataUpdateDone = function() { | |
| return window.prerenderReady = true; | |
| }; | |
| translateMetadata = function() { | |
| var tagline; | |
| tagline = _.i18n('your friends and communities are your best library'); | |
| return metadataUpdate({ | |
| title: "Inventaire - " + tagline, | |
| description: _.I18n('make the inventory of your books and mutualize with your friends and communities into an infinite library!') | |
| }); | |
| }; | |
| module.exports = function() { | |
| if (app.user.lang !== 'en') { | |
| translateMetadata(); | |
| } | |
| return app.commands.setHandlers({ | |
| 'metadata:update:needed': metadataUpdateNeeded, | |
| 'metadata:update': metadataUpdate, | |
| 'metadata:update:done': metadataUpdateDone, | |
| 'metadata:update:title': updateTitle | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/icon_nav", function(exports, require, module) { | |
| var noIconNavRoutes, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = function() { | |
| var $el, hide, show; | |
| $el = this.iconNav.$el; | |
| show = function() { | |
| $el.show(); | |
| return $('main').removeClass('no-icon-nav'); | |
| }; | |
| hide = function() { | |
| $el.hide(); | |
| return $('main').addClass('no-icon-nav'); | |
| }; | |
| return this.listenTo(app.vent, 'route:change', function(section) { | |
| if (indexOf.call(noIconNavRoutes, section) >= 0) { | |
| return hide(); | |
| } else { | |
| return show(); | |
| } | |
| }); | |
| }; | |
| noIconNavRoutes = ['welcome', 'login', 'signup']; | |
| }); | |
| ;require.register("modules/general/lib/move_caret_to_end", function(exports, require, module) { | |
| module.exports = function(e) { | |
| var el, range; | |
| el = e.target; | |
| if (_.isNumber(el.selectionStart)) { | |
| return el.selectionStart = el.selectionEnd = el.value.length; | |
| } else if (el.createTextRange != null) { | |
| el.focus(); | |
| range = el.createTextRange(); | |
| range.collapse(false); | |
| return range.select(); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/querystring_actions", function(exports, require, module) { | |
| var ValidEmailConfirmation, showValidEmailConfirmation; | |
| ValidEmailConfirmation = require('modules/user/views/valid_email_confirmation'); | |
| module.exports = function() { | |
| var validEmail; | |
| validEmail = app.request('route:querystring:get', 'validEmail'); | |
| if (validEmail != null) { | |
| validEmail = validEmail === 'true'; | |
| return app.request('waitForUserData').then(function() { | |
| return app.request('waitForLayout'); | |
| }).then(showValidEmailConfirmation.bind(null, validEmail)); | |
| } | |
| }; | |
| showValidEmailConfirmation = function(validEmail) { | |
| if (app.user.loggedIn) { | |
| validEmail = app.user.get('validEmail'); | |
| } | |
| return app.layout.modal.show(new ValidEmailConfirmation({ | |
| validEmail: validEmail | |
| })); | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/show_views", function(exports, require, module) { | |
| var DonateMenu, FeedbackMenu, JoyrideWelcomeTour, Loader, ShareMenu; | |
| JoyrideWelcomeTour = require('modules/welcome/views/joyride_welcome_tour'); | |
| DonateMenu = require('../views/donate_menu'); | |
| FeedbackMenu = require('../views/feedback_menu'); | |
| ShareMenu = require('../views/share_menu'); | |
| Loader = require('../views/behaviors/loader'); | |
| module.exports = { | |
| showLoader: function(options) { | |
| var loader, ref, region, selector, title; | |
| if (options == null) { | |
| options = {}; | |
| } | |
| ref = _.pickToArray(options, ['region', 'selector', 'title']), region = ref[0], selector = ref[1], title = ref[2]; | |
| if (region != null) { | |
| return region.Show(new Loader, title); | |
| } else if (selector != null) { | |
| loader = new Loader; | |
| $(selector).html(loader.render()); | |
| if (title != null) { | |
| return app.docTitle(title); | |
| } | |
| } else { | |
| return app.layout.main.Show(new Loader, title); | |
| } | |
| }, | |
| showEntity: function(e) { | |
| var data, href, label, ref, uri; | |
| href = e.currentTarget.href; | |
| if (href == null) { | |
| throw new Error("couldnt showEntity: href not found"); | |
| } | |
| if (!_.isOpenedOutside(e)) { | |
| data = href.split('/entity/').last(); | |
| ref = data.split('/'), uri = ref[0], label = ref[1]; | |
| return app.execute('show:entity', uri, label); | |
| } | |
| }, | |
| showJoyrideWelcomeTour: function() { | |
| return this.joyride.show(new JoyrideWelcomeTour); | |
| }, | |
| showDonateMenu: function() { | |
| return app.layout.modal.show(new DonateMenu); | |
| }, | |
| showFeedbackMenu: function(options) { | |
| return app.layout.modal.show(new FeedbackMenu(options)); | |
| }, | |
| shareLink: function() { | |
| return app.layout.modal.show(new ShareMenu); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/smart_prevent_default", function(exports, require, module) { | |
| module.exports = function(e) { | |
| var $link, href; | |
| if (e.which !== 1) { | |
| return; | |
| } | |
| if (_.isOpenedOutside(e)) { | |
| return; | |
| } | |
| if (e.currentTarget != null) { | |
| $link = $(e.currentTarget); | |
| href = $link.attr("href"); | |
| if (!href) { | |
| return; | |
| } | |
| } | |
| if (/^#|javascript:|mailto:|(?:\w+:)?\/\//.test(href)) { | |
| return; | |
| } | |
| return e.preventDefault(); | |
| }; | |
| }); | |
| ;require.register("modules/general/lib/wait_for_check", function(exports, require, module) { | |
| module.exports = function(options) { | |
| var $selector, action, error, promise, selector, success; | |
| selector = options.selector, $selector = options.$selector, action = options.action, promise = options.promise, success = options.success, error = options.error; | |
| $selector || ($selector = $(selector)); | |
| $selector.trigger('loading', { | |
| selector: selector | |
| }); | |
| if (action != null) { | |
| promise = action(); | |
| } | |
| promise.then(function(res) { | |
| return $selector.trigger('check', success); | |
| })["catch"](function(err) { | |
| return $selector.trigger('fail', error); | |
| }); | |
| return promise; | |
| }; | |
| }); | |
| ;require.register("modules/general/models/filterable", function(exports, require, module) { | |
| module.exports = Backbone.NestedModel.extend({ | |
| asMatchable: function(expr) { | |
| return []; | |
| }, | |
| matches: function(expr) { | |
| var hasMatch; | |
| if (expr == null) { | |
| return true; | |
| } | |
| hasMatch = _.some(this.asMatchable(), function(field) { | |
| return (field != null ? field.match(expr) : void 0) != null; | |
| }); | |
| if (hasMatch) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/models/img", function(exports, require, module) { | |
| var images_, maxSize; | |
| images_ = require('lib/images'); | |
| maxSize = CONFIG.images.maxSize; | |
| module.exports = Backbone.NestedModel.extend({ | |
| initialize: function() { | |
| var dataUrl, input, ref, url; | |
| ref = this.toJSON(), url = ref.url, dataUrl = ref.dataUrl; | |
| input = url || dataUrl; | |
| if (input == null) { | |
| throw new Error('at least one input attribute is required'); | |
| } | |
| if (url != null) { | |
| this.initFromUrl(url); | |
| } | |
| if (dataUrl != null) { | |
| this.initDataUrl(dataUrl); | |
| } | |
| return this.crop = this.get('crop'); | |
| }, | |
| initFromUrl: function(url) { | |
| return this.waitForReady = this.setDataUrlFromUrl(url).then(this.resize.bind(this))["catch"](_.Error('initFromUrl err')); | |
| }, | |
| initDataUrl: function(dataUrl) { | |
| this.set('originalDataUrl', dataUrl); | |
| return this.waitForReady = this.resize(); | |
| }, | |
| setDataUrlFromUrl: function(url) { | |
| return images_.getUrlDataUrl(url).then(this.set.bind(this, 'originalDataUrl')); | |
| }, | |
| resize: function() { | |
| var dataUrl; | |
| dataUrl = this.get('originalDataUrl'); | |
| return images_.resizeDataUrl(dataUrl, maxSize).then(this.set.bind(this))["catch"](_.Error('resize')); | |
| }, | |
| select: function() { | |
| return this.set('selected', true); | |
| }, | |
| setCroppedDataUrl: function() { | |
| var croppedData, dataUrl, height, width; | |
| if (this.view != null) { | |
| croppedData = this.view.getCroppedDataUrl(); | |
| dataUrl = croppedData.dataUrl, width = croppedData.width, height = croppedData.height; | |
| return this.set({ | |
| croppedDataUrl: dataUrl, | |
| cropped: { | |
| width: width, | |
| height: height | |
| } | |
| }); | |
| } | |
| }, | |
| getFinalDataUrl: function() { | |
| return this.get('croppedDataUrl') || this.get('dataUrl'); | |
| }, | |
| imageHasChanged: function() { | |
| var finalAttribute, heightChange, widthChange; | |
| finalAttribute = this.crop ? 'cropped' : 'resized'; | |
| widthChange = this._areDifferent(finalAttribute, 'original', 'width'); | |
| heightChange = this._areDifferent(finalAttribute, 'original', 'height'); | |
| return _.log(widthChange || heightChange, 'image changed?'); | |
| }, | |
| _areDifferent: function(a, b, value) { | |
| return this.get(a)[value] !== this.get(b)[value]; | |
| }, | |
| getFinalUrl: function() { | |
| var originalUrl; | |
| if (this.crop) { | |
| this.setCroppedDataUrl(); | |
| } | |
| originalUrl = this.get('url'); | |
| if ((originalUrl != null) && !this.imageHasChanged()) { | |
| return _.preq.resolve(originalUrl); | |
| } | |
| return images_.upload({ | |
| blob: images_.dataUrlToBlob(this.getFinalDataUrl()), | |
| id: this.cid | |
| }).then(_.property(this.cid)).then(_.Log('url?')); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/models/positionable", function(exports, require, module) { | |
| var Filterable; | |
| Filterable = require('./filterable'); | |
| module.exports = Filterable.extend({ | |
| hasPosition: function() { | |
| return this.has('position'); | |
| }, | |
| getCoords: function() { | |
| var lat, latLng, lng; | |
| latLng = this.get('position'); | |
| if (latLng != null) { | |
| lat = latLng[0], lng = latLng[1]; | |
| return { | |
| lat: lat, | |
| lng: lng | |
| }; | |
| } else { | |
| return {}; | |
| } | |
| }, | |
| getLatLng: function() { | |
| if (this._latLng != null) { | |
| return this._latLng; | |
| } else { | |
| return this.setLatLng(); | |
| } | |
| }, | |
| setLatLng: function() { | |
| var lat, lng, ref; | |
| if (this.hasPosition()) { | |
| ref = this.get('position'), lat = ref[0], lng = ref[1]; | |
| return this._latLng = new L.LatLng(lat, lng); | |
| } else { | |
| return this._latLng = null; | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/models/session", function(exports, require, module) { | |
| var push, startTime; | |
| startTime = new Date().getTime(); | |
| module.exports = Backbone.NestedModel.extend({ | |
| initialize: function() { | |
| this.set('navigation', []); | |
| this.set('error', []); | |
| this.set('time', { | |
| first: startTime | |
| }); | |
| this.logFirstLoadTime(); | |
| this.once('update', this.setId.bind(this)); | |
| this.on('update', _.debounce(this.sync, 1000)); | |
| return setInterval(this.update.bind(this), 30 * 1000); | |
| }, | |
| setId: function() { | |
| var badLuckToken, day, millisec; | |
| day = _.niceDate().replace(/-/g, ''); | |
| millisec = _.timeSinceMidnight(); | |
| badLuckToken = _.idGenerator(4); | |
| return this.set('_id', day + "-" + millisec + "-" + badLuckToken); | |
| }, | |
| update: function() { | |
| this.updateLastPageTime(this.timer()); | |
| return this.trigger('update'); | |
| }, | |
| sync: function() { | |
| var report; | |
| report = this.toJSON(); | |
| if (report.navigation != null) { | |
| return $.post('/api/logs/public', report); | |
| } | |
| }, | |
| record: function(page) { | |
| var action, timestamp; | |
| timestamp = _.now(); | |
| action = { | |
| page: ("/" + page).replace('//', '/'), | |
| timestamp: timestamp | |
| }; | |
| this.updateLastPageTime(timestamp); | |
| this.updateSessionTime(); | |
| push(this, 'navigation', action); | |
| return this.trigger('update'); | |
| }, | |
| recordError: function(error) { | |
| var hash; | |
| if (!this.dupplicatedError(error)) { | |
| hash = _.hashCode(JSON.stringify(error)); | |
| error.hash = hash; | |
| push(this, 'error', error); | |
| this.lastPageSet('errorHash', hash); | |
| return this.trigger('update'); | |
| } | |
| }, | |
| dupplicatedError: function(error) { | |
| var msg, ref, sameMessage; | |
| msg = ((ref = error.error) != null ? ref[0] : void 0) || error.message; | |
| sameMessage = function(err) { | |
| return err.error[0] === msg; | |
| }; | |
| return this.get('error').filter(sameMessage).length > 0; | |
| }, | |
| updateLastPageTime: function(timestamp) { | |
| var key, last, lastIndex, pageTime, ref; | |
| last = (ref = this.get('navigation')) != null ? ref.slice(-1)[0] : void 0; | |
| if (last != null) { | |
| lastIndex = this.get('navigation').length - 1; | |
| key = "navigation[" + lastIndex + "].time"; | |
| pageTime = (timestamp - last.timestamp) / 1000; | |
| return this.set(key, pageTime); | |
| } | |
| }, | |
| lastPageSet: function(attr, value) { | |
| var key, last, lastIndex, ref; | |
| last = (ref = this.get('navigation')) != null ? ref.slice(-1)[0] : void 0; | |
| if (last != null) { | |
| lastIndex = this.get('navigation').length - 1; | |
| key = "navigation[" + lastIndex + "]." + attr; | |
| if (key != null) { | |
| return this.set(key, value); | |
| } | |
| } else { | |
| return push(this, 'navigation', { | |
| attr: value | |
| }); | |
| } | |
| }, | |
| logFirstLoadTime: function() { | |
| return window.onload = this.firstLoadTime.bind(this); | |
| }, | |
| firstLoadTime: function() { | |
| var time; | |
| time = this.timer(); | |
| _.log(time, 'first load time'); | |
| return this.set('time.firstLoadTime', time); | |
| }, | |
| timer: function() { | |
| var first, now, time; | |
| first = this.get('time.first'); | |
| now = _.now(); | |
| this.set('time.last', now); | |
| time = (now - first) / 1000; | |
| return time; | |
| }, | |
| updateSessionTime: function() { | |
| return this.set('time.sessionTimeSec', this.timer()); | |
| } | |
| }); | |
| push = function(model, attribute, value) { | |
| var arr; | |
| arr = model.get(attribute); | |
| arr.push(value); | |
| return model.set(attribute, arr); | |
| }; | |
| }); | |
| ;require.register("modules/general/plugins/behaviors", function(exports, require, module) { | |
| var alert_, loading_, successCheck_; | |
| loading_ = { | |
| startLoading: function(options) { | |
| if (_.isString(options)) { | |
| options = { | |
| selector: options | |
| }; | |
| } | |
| return this.$el.trigger('loading', options); | |
| }, | |
| stopLoading: function() { | |
| return this.$el.trigger('stopLoading'); | |
| } | |
| }; | |
| successCheck_ = { | |
| check: function(label, cb, res) { | |
| this.$el.trigger('check', cb); | |
| if ((label != null) && (res != null)) { | |
| return _.log(res, label); | |
| } | |
| }, | |
| fail: function(label, cb, err) { | |
| this.$el.trigger('fail', cb); | |
| if ((label != null) && (err != null)) { | |
| return _.error(err, label); | |
| } | |
| } | |
| }; | |
| successCheck_.Check = function(label, cb) { | |
| return successCheck_.check.bind(this, label, cb); | |
| }; | |
| successCheck_.Fail = function(label, cb) { | |
| return successCheck_.fail.bind(this, label, cb); | |
| }; | |
| alert_ = { | |
| alert: function(message) { | |
| console.warn(message); | |
| this.$el.trigger('alert', { | |
| message: _.i18n(message) | |
| }); | |
| } | |
| }; | |
| module.exports = _.extend({}, loading_, successCheck_, alert_); | |
| }); | |
| ;require.register("modules/general/plugins/login", function(exports, require, module) { | |
| var events, handlers; | |
| events = { | |
| 'click #signupRequest': 'showSignup', | |
| 'click #loginRequest': 'showLogin' | |
| }; | |
| handlers = { | |
| showSignup: function() { | |
| return app.execute('show:signup'); | |
| }, | |
| showLogin: function() { | |
| return app.execute('show:login'); | |
| } | |
| }; | |
| module.exports = _.BasicPlugin(events, handlers); | |
| }); | |
| ;require.register("modules/general/plugins/masonry", function(exports, require, module) { | |
| var itemWidth; | |
| itemWidth = 230; | |
| module.exports = function(containerSelector, itemSelector, minWidth) { | |
| var initMasonry, refresh; | |
| if (minWidth == null) { | |
| minWidth = 500; | |
| } | |
| if (!_.isView(this)) { | |
| throw new Error('should be called with a view as context'); | |
| } | |
| initMasonry = function() { | |
| var $itemsList, container, itemsPerLine, positionBefore, tooFewItems; | |
| $itemsList = $('.itemsList'); | |
| if ($itemsList.length === 0) { | |
| return; | |
| } | |
| itemsPerLine = $itemsList.width() / itemWidth; | |
| tooFewItems = this.collection.length < itemsPerLine; | |
| if (!(_.smallScreen(minWidth) || tooFewItems)) { | |
| _.log('masonry:reinit'); | |
| positionBefore = window.scrollY; | |
| container = document.querySelector(containerSelector); | |
| $(containerSelector).css('opacity', 0); | |
| new Masonry(container, { | |
| itemSelector: itemSelector, | |
| isFitWidth: true, | |
| isResizable: true, | |
| isAnimated: true, | |
| gutter: 5 | |
| }); | |
| _.scrollHeight(positionBefore, 0); | |
| return $(containerSelector).css('opacity', 1); | |
| } | |
| }; | |
| refresh = function() { | |
| return $(containerSelector).imagesLoaded(initMasonry.bind(this)); | |
| }; | |
| this.lazyMasonryRefresh = _.debounce(refresh.bind(this), 200); | |
| }; | |
| }); | |
| ;require.register("modules/general/plugins/messages", function(exports, require, module) { | |
| var forms_; | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = { | |
| postMessage: function(posterReqRes, collection, maxLength) { | |
| var id, message; | |
| message = this.ui.message.val(); | |
| if (!this.validMessageLength(message, maxLength)) { | |
| return; | |
| } | |
| id = this.model.id; | |
| app.request(posterReqRes, id, message, collection)["catch"](this.postMessageFail.bind(this, message)); | |
| return this.emptyTextarea(); | |
| }, | |
| validMessageLength: function(message, maxLength) { | |
| var err; | |
| if (maxLength == null) { | |
| maxLength = 5000; | |
| } | |
| if (message.length === 0) { | |
| return false; | |
| } | |
| if (message.length > maxLength) { | |
| err = new Error("can't be longer than " + maxLength + " characters"); | |
| this.postMessageFail(message, err); | |
| return false; | |
| } | |
| return true; | |
| }, | |
| postMessageFail: function(message, err) { | |
| this.recoverMessage(message); | |
| err.selector = '.alertBox'; | |
| return forms_.alert(this, err); | |
| }, | |
| emptyTextarea: function() { | |
| return this.ui.message.val(''); | |
| }, | |
| recoverMessage: function(message) { | |
| return this.ui.message.val(message); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/general/plugins/pagination", function(exports, require, module) { | |
| module.exports = function(params) { | |
| var batchLength, displayedLimit, fetchMore, initialLength, more; | |
| batchLength = params.batchLength, initialLength = params.initialLength, fetchMore = params.fetchMore, more = params.more; | |
| batchLength || (batchLength = 5); | |
| if (!_.isView(this)) { | |
| throw new Error('should be called with a view as context'); | |
| } | |
| displayedLimit = initialLength || batchLength; | |
| this.lazyRender = _.LazyRender(this); | |
| if (fetchMore == null) { | |
| fetchMore = function() { | |
| return _.preq.resolved; | |
| }; | |
| more = function() { | |
| return this.collection.length > displayedLimit; | |
| }; | |
| } | |
| return _.extend(this, { | |
| filter: function(child, index, collection) { | |
| return (-1 < index && index < displayedLimit); | |
| }, | |
| more: more, | |
| displayMore: function() { | |
| return fetchMore().then((function(_this) { | |
| return function() { | |
| displayedLimit += batchLength; | |
| return _this.lazyRender(); | |
| }; | |
| })(this)); | |
| } | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/general/plugins/wiki_bar", function(exports, require, module) { | |
| var appendWikipediaFrame, events, handlers, scrollToIframeTop; | |
| events = { | |
| 'click a.showWikipediaPreview': 'toggleWikiIframe' | |
| }; | |
| handlers = { | |
| toggleWikiIframe: function() { | |
| var $carets, $iframe, $wpiframe, hasIframe; | |
| $wpiframe = this.$el.find('.wikipedia-iframe'); | |
| $iframe = $wpiframe.find('iframe'); | |
| $carets = this.$el.find('.wikipedia-iframe').find('.fa'); | |
| $iframe.toggle(); | |
| $carets.toggle(); | |
| hasIframe = $iframe.length > 0; | |
| if (!hasIframe) { | |
| appendWikipediaFrame.call(this, $wpiframe); | |
| $wpiframe.find('iframe').show(); | |
| return _.scrollTop($wpiframe); | |
| } | |
| } | |
| }; | |
| appendWikipediaFrame = function($el) { | |
| var src, url; | |
| url = this.model.get('wikipedia.url'); | |
| src = url + "?useskin=mobil&mobileaction=toggle_view_mobile"; | |
| return $el.append("<iframe src=\"" + src + "\" frameborder='0'></iframe>"); | |
| }; | |
| scrollToIframeTop = function($el) { | |
| var height; | |
| height = $el.offset().top; | |
| return $('body').animate({ | |
| scrollTop: height | |
| }, 500); | |
| }; | |
| module.exports = _.BasicPlugin(events, handlers); | |
| }); | |
| ;require.register("modules/general/regions/common_el", function(exports, require, module) { | |
| module.exports = Marionette.Region.extend({ | |
| attachHtml: function(view) { | |
| return $(view.el).insertAfter(this.$el); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/app_layout", function(exports, require, module) { | |
| var IconNav, documentLang, initDynamicBackground, initHeadMetadataCommands, initIconNavHandlers, initWindowResizeEvents, showViews, waitForCheck; | |
| waitForCheck = require('../lib/wait_for_check'); | |
| documentLang = require('../lib/document_lang'); | |
| showViews = require('../lib/show_views'); | |
| IconNav = require('./icon_nav'); | |
| initIconNavHandlers = require('../lib/icon_nav'); | |
| initDynamicBackground = require('../lib/dynamic_background'); | |
| initHeadMetadataCommands = require('../lib/head_metadata'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/app_layout'), | |
| el: '#app', | |
| regions: { | |
| iconNav: '#iconNav', | |
| main: 'main', | |
| accountMenu: '#accountMenu', | |
| modal: '#modalContent', | |
| joyride: '#joyride' | |
| }, | |
| ui: { | |
| bg: '#bg' | |
| }, | |
| events: { | |
| 'click .showDonateMenu': 'showDonateMenu', | |
| 'click .showFeedbackMenu': 'showFeedbackMenu', | |
| 'click a.wd-Q, a.showEntity': 'showEntity', | |
| 'click .shareLink': 'shareLink' | |
| }, | |
| behaviors: { | |
| General: {}, | |
| PreventDefault: {} | |
| }, | |
| initialize: function(e) { | |
| _.extend(this, showViews); | |
| this.render(); | |
| app.commands.setHandlers({ | |
| 'show:loader': this.showLoader, | |
| 'main:fadeIn': function() { | |
| return app.layout.main.$el.hide().fadeIn(200); | |
| }, | |
| 'current:username:set': this.setCurrentUsername, | |
| 'current:username:hide': this.hideCurrentUsername, | |
| 'show:joyride:welcome:tour': this.showJoyrideWelcomeTour.bind(this), | |
| 'show:feedback:menu': this.showFeedbackMenu | |
| }); | |
| app.reqres.setHandlers({ | |
| 'waitForCheck': waitForCheck | |
| }); | |
| documentLang.keepBodyLangUpdated.call(this); | |
| documentLang.keepHeadAlternateLangsUpdated.call(this); | |
| documentLang.updateOgLocalAlternates(); | |
| initHeadMetadataCommands(); | |
| initIconNavHandlers.call(this); | |
| initDynamicBackground.call(this); | |
| return app.request('waitForData').then(initWindowResizeEvents); | |
| }, | |
| serializeData: function() { | |
| return { | |
| topbar: this.topBarData() | |
| }; | |
| }, | |
| onRender: function() { | |
| return this.iconNav.show(new IconNav); | |
| }, | |
| topBarData: function() { | |
| return { | |
| options: { | |
| custom_back_text: true, | |
| back_text: _.icon('caret-left') + ' ' + _.i18n('back'), | |
| is_hover: false | |
| } | |
| }; | |
| }, | |
| setCurrentUsername: function(username) { | |
| $('#currentUsername').text(username); | |
| return $('#currentUser').slideDown(); | |
| }, | |
| hideCurrentUsername: function() { | |
| return $('#currentUser').hide(); | |
| } | |
| }); | |
| initWindowResizeEvents = function() { | |
| var resize, resizeEnd; | |
| resizeEnd = function() { | |
| return app.vent.trigger('window:resize'); | |
| }; | |
| resize = _.debounce(resizeEnd, 150); | |
| return $(window).resize(resize); | |
| }; | |
| }); | |
| ;require.register("modules/general/views/behaviors/change_picture", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/change_picture'), | |
| serializeData: function() { | |
| return this.model.serializeData(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/behaviors/confirmation_modal", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'confirmationModal', | |
| template: require('./templates/confirmation_modal'), | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| behaviors: { | |
| SuccessCheck: {}, | |
| ElasticTextarea: {}, | |
| General: {} | |
| }, | |
| serializeData: function() { | |
| var data; | |
| data = this.options; | |
| data.yes || (data.yes = 'yes'); | |
| data.no || (data.no = 'no'); | |
| return data; | |
| }, | |
| events: { | |
| 'click a#yes': 'yesClick', | |
| 'click a#no': 'close' | |
| }, | |
| yesClick: function() { | |
| var action, ref, selector; | |
| ref = this.options, action = ref.action, selector = ref.selector; | |
| return _.preq.start.then(this.executeFormAction.bind(this)).then(action).then(this.success.bind(this))["catch"](this.error.bind(this))["finally"](this.stopLoading.bind(null, selector)); | |
| }, | |
| success: function(res) { | |
| this.$el.trigger('check', this.close.bind(this)); | |
| return res; | |
| }, | |
| error: function(err) { | |
| _.error(err, 'confirmation action err'); | |
| this.$el.trigger('fail', this.close.bind(this)); | |
| return err; | |
| }, | |
| close: function() { | |
| return app.execute('modal:close'); | |
| }, | |
| stopLoading: function(selector) { | |
| if (selector != null) { | |
| return $(selector).trigger('stopLoading'); | |
| } else { | |
| return _.warn('no selector was provided'); | |
| } | |
| }, | |
| executeFormAction: function() { | |
| var formAction, formContent; | |
| formAction = this.options.formAction; | |
| if (formAction != null) { | |
| formContent = this.$el.find('#confirmationForm').val(); | |
| if (_.isNonEmptyString(formContent)) { | |
| return formAction(formContent); | |
| } | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/behaviors/loader", function(exports, require, module) { | |
| var behaviorsPlugin; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/loader'), | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| onShow: function() { | |
| return behaviorsPlugin.startLoading.call(this); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/behaviors/picture", function(exports, require, module) { | |
| var behaviorsPlugin; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'div', | |
| template: require('./templates/picture'), | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| this.listenTo(this.model, 'change:selected', this.lazyRender); | |
| this.model.waitForReady.then((function(_this) { | |
| return function() { | |
| return _this.ready = true; | |
| }; | |
| })(this)).then(this.lazyRender); | |
| return this.model.view = this; | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.toJSON(), { | |
| classes: this.getClasses(), | |
| ready: this.ready | |
| }); | |
| }, | |
| ui: { | |
| figure: 'figure', | |
| img: '.original' | |
| }, | |
| getClasses: function() { | |
| if (this.model.get('selected')) { | |
| return 'selected'; | |
| } else { | |
| return ''; | |
| } | |
| }, | |
| onRender: function() { | |
| if (this.model.get('crop')) { | |
| behaviorsPlugin.startLoading.call(this, 'figure'); | |
| if (this.ready && this.model.get('selected')) { | |
| setTimeout(this.initCropper.bind(this), 200); | |
| return behaviorsPlugin.stopLoading.call(this, 'figure'); | |
| } | |
| } | |
| }, | |
| initCropper: function() { | |
| return this.ui.img.cropper({ | |
| aspectRatio: 1 / 1, | |
| minCropBoxWidth: 300, | |
| minCropBoxHeight: 300 | |
| }); | |
| }, | |
| getCroppedDataUrl: function(outputQuality) { | |
| var canvas, data; | |
| if (outputQuality == null) { | |
| outputQuality = 1; | |
| } | |
| data = this.ui.img.cropper('getData'); | |
| canvas = this.ui.img.cropper('getCroppedCanvas'); | |
| data.dataUrl = canvas.toDataURL('image/jpeg', outputQuality); | |
| return data; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/behaviors/picture_picker", function(exports, require, module) { | |
| var Imgs, behaviorsPlugin, error_, forms_, getImgData, images_, isSelectedModel, validateUrlInput; | |
| Imgs = require('modules/general/collections/imgs'); | |
| images_ = require('lib/images'); | |
| forms_ = require('modules/general/lib/forms'); | |
| error_ = require('lib/error'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| className: function() { | |
| var limit; | |
| limit = this.options.limit; | |
| return "picture-picker limit-" + limit; | |
| }, | |
| template: require('./templates/picture_picker'), | |
| childViewContainer: '#availablePictures', | |
| childView: require('./picture'), | |
| behaviors: { | |
| General: {}, | |
| AlertBox: {}, | |
| SuccessCheck: {}, | |
| Loading: {}, | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| var collectionData, pictures; | |
| this.limit = this.options.limit || 1; | |
| pictures = _.forceArray(this.options.pictures); | |
| collectionData = pictures.map(getImgData.bind(null, this.options.crop)); | |
| return this.collection = new Imgs(collectionData); | |
| }, | |
| serializeData: function() { | |
| return { | |
| urlInput: this.urlInputData() | |
| }; | |
| }, | |
| urlInputData: function() { | |
| return { | |
| nameBase: 'url', | |
| field: { | |
| type: 'url', | |
| placeholder: _.i18n('enter an image url') | |
| }, | |
| button: { | |
| text: _.i18n('go get it!') | |
| }, | |
| allowMultiple: this.limit > 1 | |
| }; | |
| }, | |
| onShow: function() { | |
| app.execute('modal:open', 'large'); | |
| this.selectFirst(); | |
| return this.ui.urlInput.focus(); | |
| }, | |
| ui: { | |
| urlInput: '#urlField' | |
| }, | |
| events: { | |
| 'click #validate': 'validate', | |
| 'click #cancel': 'close', | |
| 'change input[type=file]': 'getFilesPictures', | |
| 'click #urlButton': 'fetchUrlPicture' | |
| }, | |
| selectFirst: function() { | |
| var ref; | |
| return (ref = this.collection.models[0]) != null ? ref.select() : void 0; | |
| }, | |
| validate: function() { | |
| behaviorsPlugin.startLoading.call(this, '#validate'); | |
| return this.getFinalUrls()["catch"](error_.Complete('.alertBox')).then(_.Log('final urls')).then(this._saveAndClose.bind(this))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| getFinalUrls: function() { | |
| var selectedModels; | |
| selectedModels = this.collection.models.filter(isSelectedModel); | |
| _.log(selectedModels, 'selected models'); | |
| selectedModels = selectedModels.slice(0, this.limit); | |
| _.log(selectedModels, 'sliced models'); | |
| return Promise.all(_.invoke(selectedModels, 'getFinalUrl')); | |
| }, | |
| _saveAndClose: function(urls) { | |
| this.options.save(urls); | |
| return this.close(); | |
| }, | |
| fetchUrlPicture: function(e) { | |
| var url; | |
| url = this.ui.urlInput.val(); | |
| url = images_.getNonResizedUrl(url); | |
| return _.preq.start.then(validateUrlInput.bind(null, url)).then(images_.getUrlDataUrl.bind(null, url)).then(this._addToPictures.bind(this))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| getFilesPictures: function(e) { | |
| var file, files, i, len, results; | |
| files = _.toArray(e.target.files); | |
| _.log(files, 'files'); | |
| results = []; | |
| for (i = 0, len = files.length; i < len; i++) { | |
| file = files[i]; | |
| results.push(this._addFileToPictures(file)); | |
| } | |
| return results; | |
| }, | |
| _addFileToPictures: function(file) { | |
| if (!_.isObject(file)) { | |
| return _.warn(file, 'couldnt _addFileToPictures'); | |
| } | |
| return images_.getFileDataUrl(file).then(this._addToPictures.bind(this))["catch"](_.Error('_addFileToPictures')); | |
| }, | |
| _addToPictures: function(dataUrl) { | |
| if (this.limit === 1) { | |
| this._unselectAll(); | |
| } | |
| return this._addDataUrlToCollection(dataUrl); | |
| }, | |
| _unselectAll: function(dataUrl) { | |
| return this.collection.invoke('set', 'selected', false); | |
| }, | |
| _addDataUrlToCollection: function(dataUrl) { | |
| return this.collection.add({ | |
| dataUrl: dataUrl, | |
| selected: true, | |
| crop: this.options.crop | |
| }); | |
| }, | |
| close: function() { | |
| return app.execute('modal:close'); | |
| } | |
| }); | |
| isSelectedModel = function(model) { | |
| return model.get('selected'); | |
| }; | |
| validateUrlInput = function(url) { | |
| if (!_.isUrl(url)) { | |
| return forms_.throwError('invalid url', '#urlField', arguments); | |
| } | |
| }; | |
| getImgData = function(crop, url) { | |
| return { | |
| url: url, | |
| crop: crop | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/general/views/behaviors/templates/wikidata_P", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<span class='wd-P'>" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.id : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + ":</span>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/behaviors/templates/wikidata_Q", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return " <a\n href=\"" | |
| + alias3((helpers.wdLocalHref || (depth0 && depth0.wdLocalHref) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),(depth0 != null ? depth0.label : depth0),{"name":"wdLocalHref","hash":{},"data":data})) | |
| + "\"\n class='link qlabel wd-Q'\n resource='" | |
| + alias3((helpers.wdRemoteHref || (depth0 && depth0.wdRemoteHref) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"wdRemoteHref","hash":{},"data":data})) | |
| + "'\n data-qid='" | |
| + alias3(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "'>\n " | |
| + alias3(((helper = (helper = helpers.alt || (depth0 != null ? depth0.alt : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"alt","hash":{},"data":data}) : helper))) | |
| + "\n </a>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return " <span\n class='qlabel wd-Q'\n resource='" | |
| + alias3((helpers.wdRemoteHref || (depth0 && depth0.wdRemoteHref) || alias2).call(alias1,(depth0 != null ? depth0.id : depth0),{"name":"wdRemoteHref","hash":{},"data":data})) | |
| + "'\n data-qid='" | |
| + alias3(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "'>\n " | |
| + alias3(((helper = (helper = helpers.alt || (depth0 != null ? depth0.alt : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"alt","hash":{},"data":data}) : helper))) | |
| + "\n </span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.linkify : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/call_to_connection", function(exports, require, module) { | |
| var banner, loginPlugin; | |
| loginPlugin = require('modules/general/plugins/login'); | |
| banner = require('lib/urls').images.banner; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/call_to_connection'), | |
| behaviors: { | |
| General: {} | |
| }, | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.options, { | |
| banner: banner | |
| }); | |
| }, | |
| initialize: function() { | |
| return loginPlugin.call(this); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/donate_menu", function(exports, require, module) { | |
| var bitcoin, gratipay, ref; | |
| ref = require('lib/urls'), bitcoin = ref.bitcoin, gratipay = ref.gratipay; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/donate_menu'), | |
| className: 'donate-menu', | |
| behaviors: { | |
| General: {} | |
| }, | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| serializeData: function() { | |
| return { | |
| bitcoin: bitcoin | |
| }; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/error", function(exports, require, module) { | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'error', | |
| template: require('./templates/error'), | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| serializeData: function() { | |
| return this.options; | |
| }, | |
| events: { | |
| 'click .button': 'buttonAction' | |
| }, | |
| ui: { | |
| errorBox: '.errorBox' | |
| }, | |
| buttonAction: function(e) { | |
| var buttonAction; | |
| if (!_.isOpenedOutside(e)) { | |
| buttonAction = this.options.redirection.buttonAction; | |
| if (_.isFunction(buttonAction)) { | |
| return buttonAction(); | |
| } | |
| } | |
| }, | |
| onShow: function() { | |
| app.execute('background:cover'); | |
| return this.ui.errorBox.fadeIn(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/feedback_menu", function(exports, require, module) { | |
| var behaviorsPlugin, contact; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| contact = require('lib/urls').contact; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/feedback_menu'), | |
| className: 'feedback-menu', | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| behaviors: { | |
| Loading: {}, | |
| SuccessCheck: {}, | |
| ElasticTextarea: {}, | |
| General: {}, | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| serializeData: function() { | |
| return { | |
| loggedIn: app.user.loggedIn, | |
| user: app.user.toJSON(), | |
| contact: contact, | |
| subject: this.options.subject | |
| }; | |
| }, | |
| ui: { | |
| unknownUser: '.unknownUser', | |
| subject: '#subject', | |
| message: '#message', | |
| sendFeedback: '#sendFeedback' | |
| }, | |
| events: { | |
| 'click a#sendFeedback': 'sendFeedback' | |
| }, | |
| sendFeedback: function() { | |
| this.startLoading('#sendFeedback'); | |
| return this.postFeedback().then(this.Check('feedback res', function() { | |
| return app.execute('modal:close'); | |
| }))["catch"](this.Fail('feedback err')); | |
| }, | |
| postFeedback: function() { | |
| return _.preq.post(app.API.feedback, { | |
| subject: _.log(this.ui.subject.val(), 'subject'), | |
| message: _.log(this.ui.message.val(), 'message'), | |
| unknownUser: _.log(this.ui.unknownUser.val(), 'unknownUser') | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/icon_nav", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/icon_nav'), | |
| className: 'innerIconNav', | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| return this.once('render', this.initListeners.bind(this)); | |
| }, | |
| initListeners: function() { | |
| return this.listenTo(app.vent, { | |
| 'route:change': this.selectButtonFromRoute.bind(this), | |
| 'transactions:unread:change': this.lazyRender, | |
| 'i18n:reset': this.lazyRender, | |
| 'network:requests:udpate': this.lazyRender | |
| }); | |
| }, | |
| events: { | |
| 'click .add': 'showAddLayout', | |
| 'click .network': 'showNetwork', | |
| 'click .browse': 'showInventory', | |
| 'click .map': 'showMap', | |
| 'click .exchanges': 'showTransactions' | |
| }, | |
| ui: { | |
| all: 'a.iconButton', | |
| add: '.add', | |
| network: '.network', | |
| browse: '.browse', | |
| map: '.map', | |
| exchanges: '.exchanges' | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| serializeData: function() { | |
| return { | |
| networkUpdates: this.networkUpdates(), | |
| exchangesUpdates: this.exchangesUpdates() | |
| }; | |
| }, | |
| onRender: function() { | |
| return this.selectButtonFromRoute(_.currentSection()); | |
| }, | |
| selectButtonFromRoute: function(section) { | |
| this.unselectAll(); | |
| switch (section) { | |
| case 'add': | |
| case 'search': | |
| return this.selectButton('add'); | |
| case 'network': | |
| return this.selectButton('network'); | |
| case 'inventory': | |
| case 'groups': | |
| return this.selectButton('browse'); | |
| case 'map': | |
| return this.selectButton('map'); | |
| case 'transactions': | |
| return this.selectButton('exchanges'); | |
| } | |
| }, | |
| unselectAll: function() { | |
| return this.ui.all.removeClass('selected'); | |
| }, | |
| selectButton: function(uiName) { | |
| return this.ui[uiName].addClass('selected'); | |
| }, | |
| showAddLayout: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| this.selectButton('add'); | |
| return app.execute('show:add:layout'); | |
| } | |
| }, | |
| showNetwork: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| this.selectButton('network'); | |
| return app.execute('show:network'); | |
| } | |
| }, | |
| showInventory: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| this.selectButton('browse'); | |
| return app.execute('show:inventory:general'); | |
| } | |
| }, | |
| showMap: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| this.selectButton('map'); | |
| return app.execute('show:map'); | |
| } | |
| }, | |
| showTransactions: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| this.selectButton('exchanges'); | |
| return app.execute('show:transactions'); | |
| } | |
| }, | |
| networkUpdates: function() { | |
| return app.request('get:network:counters').total; | |
| }, | |
| exchangesUpdates: function() { | |
| return app.request('transactions:unread:count'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/menu/account_menu", function(exports, require, module) { | |
| var CommonEl, NotificationsList, searchInputData, sectionWithLocalSearch, urls, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| NotificationsList = require('modules/notifications/views/notifications_list'); | |
| CommonEl = require('modules/general/regions/common_el'); | |
| searchInputData = require('./search_input_data'); | |
| urls = require('lib/urls'); | |
| sectionWithLocalSearch = ['search', 'add']; | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/account_menu'), | |
| events: { | |
| 'click #name': 'selectMainUser', | |
| 'click #editProfile': function() { | |
| return app.execute('show:settings:profile'); | |
| }, | |
| 'click #editNotifications': function() { | |
| return app.execute('show:settings:notifications'); | |
| }, | |
| 'click #editLabs': function() { | |
| return app.execute('show:settings:labs'); | |
| }, | |
| 'click #signout': function() { | |
| return app.execute('logout'); | |
| }, | |
| 'click a#searchButton': 'search', | |
| 'click .showWelcome': 'closeMenu' | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.toJSON(), { | |
| search: searchInputData(), | |
| urls: urls, | |
| smallScreen: _.smallScreen() | |
| }); | |
| }, | |
| initialize: function() { | |
| this.addRegion('notifs', CommonEl.extend({ | |
| el: '#before-notifications' | |
| })); | |
| return this.listenTo(app.vent, { | |
| 'window:resize': this.render, | |
| 'search:global:show': this.showGlobalSearch.bind(this), | |
| 'search:global:hide': this.hideGlobalSearch.bind(this), | |
| 'route:change': (function(_this) { | |
| return function(section) { | |
| if (indexOf.call(sectionWithLocalSearch, section) >= 0) { | |
| return _this.hideGlobalSearch(); | |
| } else { | |
| return _this.showGlobalSearch(); | |
| } | |
| }; | |
| })(this) | |
| }); | |
| }, | |
| onShow: function() { | |
| var ref; | |
| app.execute('foundation:reload'); | |
| this.showNotifications(); | |
| if (ref = _.currentSection(), indexOf.call(sectionWithLocalSearch, ref) >= 0) { | |
| return this.hideGlobalSearch(); | |
| } | |
| }, | |
| showNotifications: function() { | |
| return this.notifs.show(new NotificationsList({ | |
| collection: app.user.notifications | |
| })); | |
| }, | |
| selectMainUser: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:inventory:user', app.user); | |
| } | |
| }, | |
| ui: { | |
| searchGroup: '#searchGroup', | |
| searchField: '#searchField' | |
| }, | |
| search: function() { | |
| var query; | |
| query = this.ui.searchField.val(); | |
| return app.execute('search:global', query); | |
| }, | |
| showGlobalSearch: function(query) { | |
| this.ui.searchGroup.fadeIn(200); | |
| if (_.isNonEmptyString(query)) { | |
| return this.ui.searchField.val(query); | |
| } | |
| }, | |
| hideGlobalSearch: function() { | |
| return this.ui.searchGroup.fadeOut(200); | |
| }, | |
| closeMenu: function() { | |
| if (_.smallScreen) { | |
| return $('.toggle-topbar').trigger('click'); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/menu/list_with_counter", function(exports, require, module) { | |
| module.exports = Marionette.CompositeView.extend({ | |
| template: require('./templates/list_with_counter'), | |
| ui: { | |
| counter: '.counter', | |
| list: 'ul' | |
| }, | |
| onRender: function() { | |
| return this.updateCounter(); | |
| }, | |
| initialize: function() { | |
| return this.initUpdaters(); | |
| }, | |
| initUpdaters: function() { | |
| return this.listenTo(this.collection, 'all', this.updateCounter); | |
| }, | |
| tagName: 'li', | |
| className: 'has-dropdown not-click', | |
| childViewContainer: '.dropdown', | |
| count: function() { | |
| return this.collection.length; | |
| }, | |
| updateCounter: function() { | |
| if (this.count() === 0) { | |
| return this.hideCounter(); | |
| } else { | |
| return this.showCounter(); | |
| } | |
| }, | |
| hideCounter: function() { | |
| return this.ui.counter.hide(); | |
| }, | |
| showCounter: function() { | |
| this.ui.counter.html(this.count()); | |
| return this.ui.counter.slideDown().attr('style', ''); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/menu/not_logged_menu", function(exports, require, module) { | |
| var loginPlugin; | |
| loginPlugin = require('modules/general/plugins/login'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/not_logged_menu'), | |
| className: 'notLoggedMenu', | |
| initialize: function() { | |
| return loginPlugin.call(this); | |
| }, | |
| onShow: function() { | |
| return app.execute('foundation:reload'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/menu/search_input_data", function(exports, require, module) { | |
| module.exports = function(nameBase, postfix) { | |
| var data, extraClasses; | |
| if (nameBase == null) { | |
| nameBase = 'search'; | |
| } | |
| extraClasses = postfix ? 'postfix' : ''; | |
| return data = { | |
| nameBase: nameBase, | |
| field: { | |
| type: 'search', | |
| placeholder: _.i18n('search a book by title, author or ISBN') | |
| }, | |
| button: { | |
| icon: 'search', | |
| classes: "secondary " + extraClasses | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/general/views/share_menu", function(exports, require, module) { | |
| var behaviorsPlugin, host; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| host = require('lib/urls').host; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/share_menu'), | |
| className: 'shareMenu', | |
| behaviors: { | |
| General: {} | |
| }, | |
| initialize: function() { | |
| this.href = encodeURIComponent(host + document.location.pathname); | |
| return this.title = encodeURIComponent(document.title); | |
| }, | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| serializeData: function() { | |
| return { | |
| facebookUrl: this.getFacebookUrl(), | |
| twitterUrl: this.getTwitterUrl(), | |
| tumblrUrl: this.getTumblrUrl() | |
| }; | |
| }, | |
| getFacebookUrl: function() { | |
| return "https://www.facebook.com/dialog/share?app_id=1383915125249576&href=" + this.href + "&caption=Inventaire&redirect_uri=" + this.href; | |
| }, | |
| getTwitterUrl: function() { | |
| return "https://twitter.com/intent/tweet?text=" + this.title + "&url=" + this.href + "&via=inventaire_io"; | |
| }, | |
| getTumblrUrl: function() { | |
| return "https://www.tumblr.com/widgets/share/tool?canonicalUrl=&url=" + this.href; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/general/views/templates/app_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div id=\"bg\"></div>\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"topbar",(depth0 != null ? depth0.topbar : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n<div id=\"iconNav\"></div>\n<main></main>\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"lateral_buttons",{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"modals",{"name":"partial","hash":{},"data":data})) | |
| + "\n<div id=\"joyride\"></div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/back", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression; | |
| return "<a class=\"back " | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.back : depth0)) != null ? stack1.classes : stack1), depth0)) | |
| + "\">" | |
| + alias2((helpers.icon || (depth0 && depth0.icon) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"arrow-left",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.back : depth0)) != null ? stack1.message : stack1), depth0)) | |
| + "</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/call_to_connection", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"connect\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.banner : depth0),560,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"inventaire banner\">\n <h2>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"call_to_connect_welcome_title",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"call_to_connect_welcome_message",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <p class=\"callToConnection\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.connectionMessage : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n <div class=\"login-buttons\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:login_buttons",{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/common_separator", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},depth0,{"name":"i18n","hash":{},"data":data})) | |
| + "\n <div class=\"rule\"></div>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return "<div class=\"rule\"></div>\n" | |
| + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},depth0,{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/ctrl_enter_click_tip", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<span class=\"shortcut-tip\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"Ctrl+Enter to send",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/donate_menu", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"donate",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<p>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"donate_intro",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n<ul>\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"credit-card",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"credit/debit card",{"name":"I18n","hash":{},"data":data})) | |
| + "</h4>\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"not available yet",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </li>\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"bitcoin",{"name":"icon","hash":{},"data":data})) | |
| + " Bitcoin</h4>\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.bitcoin : depth0)) != null ? stack1.hash : stack1),((stack1 = (depth0 != null ? depth0.bitcoin : depth0)) != null ? stack1.url : stack1),{"name":"link","hash":{},"data":data})) | |
| + "\n <span>\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"or",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"via coinbase",((stack1 = (depth0 != null ? depth0.bitcoin : depth0)) != null ? stack1.coinbase : stack1),{"name":"link","hash":{},"data":data})) | |
| + "\n </span>\n </li>\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"gratipay",{"name":"icon","hash":{},"data":data})) | |
| + " Gratipay</h4>\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"make a one-time or reccurent donation via gratipay",(depth0 != null ? depth0.gratipay : depth0),{"name":"link","hash":{},"data":data})) | |
| + "\n </li>\n</ul>\n\n<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"non-monetary donations",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<p>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"non_monetary_donations",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/error", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}; | |
| return " <h2 class=\"subheader\">\n " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n " | |
| + container.escapeExpression(((helper = (helper = helpers.header || (depth0 != null ? depth0.header : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"header","hash":{},"data":data}) : helper))) | |
| + "\n </h2>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| return container.escapeExpression((helpers.icon || (depth0 && depth0.icon) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})); | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression; | |
| return " <div class=\"redirection\">\n <p>" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.redirection : depth0)) != null ? stack1.legend : stack1), depth0)) | |
| + "</p>\n <a " | |
| + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.href : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n class=\"button radius " | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.redirection : depth0)) != null ? stack1.classes : stack1), depth0)) | |
| + "\">" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.redirection : depth0)) != null ? stack1.text : stack1), depth0)) | |
| + "</a>\n </div>\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " href=\"" | |
| + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.redirection : depth0)) != null ? stack1.href : stack1), depth0)) | |
| + "\" "; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}; | |
| return "<div class=\"errorBox\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.header : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <p>" | |
| + container.escapeExpression(((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"message","hash":{},"data":data}) : helper))) | |
| + "</p>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.redirection : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/feedback_menu", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <label>" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"from:",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <span class=\"username\">" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "</span>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " <input type=\"email\" name=\"email\" class=\"radius unknownUser\" placeholder=\"" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"from",{"name":"i18n","hash":{},"data":data})) | |
| + "...\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"feedback_title",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<p>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"feedback_intro",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n<form>\n <div class=\"from\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"to\">\n <label>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"to:",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <span class=\"email\">" | |
| + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.email : stack1), depth0)) | |
| + "</span>\n </div>\n\n <input type=\"text\" id=\"subject\" name=\"subject\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"subject",{"name":"i18n","hash":{},"data":data})) | |
| + "...\" class=\"radius\" value=\"" | |
| + alias3(((helper = (helper = helpers.subject || (depth0 != null ? depth0.subject : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"subject","hash":{},"data":data}) : helper))) | |
| + "\">\n <textarea id=\"message\" name=\"feedback\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"your message",{"name":"i18n","hash":{},"data":data})) | |
| + "...\"></textarea>\n <div>\n <a id=\"sendFeedback\" class=\"button success radius bold\" tabindex=\"0\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"send",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"send feedback",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n </div>\n</form>\n<div class=\"checkWrapper\">\n <span class=\"check\"></span>\n</div>\n<div id=\"getInvolved\">\n <h5>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"get_involved",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</h5>\n <p>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"contribution_ideas",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/feedbacks_menu", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <label>" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"from:",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <span class=\"username\">" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "</span>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " <input type=\"email\" name=\"email\" class=\"radius unknownUser\" placeholder=\"" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"from",{"name":"i18n","hash":{},"data":data})) | |
| + "...\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"feedback_title",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<p>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"feedback_intro",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n<form>\n <div class=\"from\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"to\">\n <label>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"to:",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <span class=\"email\">hello@inventaire.io</span>\n </div>\n\n <input type=\"text\" id=\"subject\" name=\"subject\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"subject",{"name":"i18n","hash":{},"data":data})) | |
| + "...\" class=\"radius\">\n <textarea id=\"message\" name=\"feedback\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"your message",{"name":"i18n","hash":{},"data":data})) | |
| + "...\"></textarea>\n <div>\n <a id=\"sendFeedback\" class=\"button success radius bold\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"send",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"send feedback",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n </div>\n</form>\n<div class=\"checkWrapper\">\n <span class=\"check\"></span>\n</div>\n<div id=\"getInvolved\">\n <h5>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"get_involved",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</h5>\n <p>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"contribution_ideas",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/filter", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return "<div class=\"filter-wrapper\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"search",{"name":"icon","hash":{},"data":data})) | |
| + "\n <input id=\"" | |
| + alias3(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\" type=\"text\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.placeholder : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "...\" value=" | |
| + alias3(((helper = (helper = helpers.value || (depth0 != null ? depth0.value : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"value","hash":{},"data":data}) : helper))) | |
| + ">\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/horizontal_separator", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"horizontal-separator separator\">\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"common_separator",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/icon_nav", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return "<div id=\"addIconButtonTop\" class=\"positioner\"></div>\n<a href=\"/add\" id=\"addIconButton\" class=\"iconButton add\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"title_add_layout",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n <div class=\"double-icon\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"search",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span>/</span>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"plus",{"name":"icon","hash":{},"data":data})) | |
| + "\n </div>\n <div class=\"label\">\n <span>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"search/add a book",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</span>\n </div>\n</a>\n<div id=\"networkIconButtonTop\" class=\"positioner\"></div>\n<a href=\"/network\" id=\"networkIconButton\" class=\"iconButton network\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"title_networt_layout",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n <div class=\"iconWithCounter count-" | |
| + alias3(((helper = (helper = helpers.networkUpdates || (depth0 != null ? depth0.networkUpdates : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"networkUpdates","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"users",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span class=\"counter\">" | |
| + alias3(((helper = (helper = helpers.networkUpdates || (depth0 != null ? depth0.networkUpdates : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"networkUpdates","hash":{},"data":data}) : helper))) | |
| + "</span>\n </div>\n <div class=\"label\">\n <span>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"friends & groups",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </div>\n</a>\n<a href=\"/inventory\" id=\"browseIconButton\" class=\"iconButton browse\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"title_browse_layout",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"list",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"browse books",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n</a>\n<a href=\"/transactions\" id=\"exchangesIconButton\" class=\"iconButton exchanges\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"title_exchanges_layout",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n <div class=\"iconWithCounter count-" | |
| + alias3(((helper = (helper = helpers.exchangesUpdates || (depth0 != null ? depth0.exchangesUpdates : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"exchangesUpdates","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"exchange",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span class=\"counter\">" | |
| + alias3(((helper = (helper = helpers.exchangesUpdates || (depth0 != null ? depth0.exchangesUpdates : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"exchangesUpdates","hash":{},"data":data}) : helper))) | |
| + "</span>\n </div>\n <div class=\"label\">\n <span>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"exchanges",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </div>\n</a>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/lateral_buttons", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div id=\"lateral-buttons\">\n <a class=\"showDonateMenu\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"money",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"donate",{"name":"I18n","hash":{},"data":data})) | |
| + "\n </a>\n <a class=\"showFeedbackMenu\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"comments",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"feedback",{"name":"I18n","hash":{},"data":data})) | |
| + "\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/loader", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"generic-loader\">\n " | |
| + container.escapeExpression((helpers.icon || (depth0 && depth0.icon) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"circle-o-notch","fa-spin loader",{"name":"icon","hash":{},"data":data})) | |
| + "\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/modals", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div id=\"modal\" class=\"reveal-modal\" data-reveal>\n <div id=\"modalContent\"></div>\n <a class=\"close-reveal-modal\">×</a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/new_message", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<form class=\"newMessage\">\n <div class=\"main\">\n <div class=\"avatar\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),50,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"\">\n </div>\n <textarea class=\"message ctrlEnterClick\" name=\"message\" placeholder=\"post a message...\">" | |
| + alias3(((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"message","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n </div>\n <div class=\"alertBox\"></div>\n <div class=\"bottom\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"ctrl_enter_click_tip",{"name":"partial","hash":{},"data":data})) | |
| + "\n <a class=\"tiny-success-button sendMessage\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"send",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n</form>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/save_cancel", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a class=\"cancelButton\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"times",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"cancel",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n<a class=\"saveButton\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"check",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"save",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/share_menu", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"facebook",(depth0 != null ? depth0.facebookUrl : depth0),"Share on facebook","facebook",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"twitter",(depth0 != null ? depth0.twitterUrl : depth0),"Share on twitter","twitter",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"tumblr",(depth0 != null ? depth0.tumblrUrl : depth0),"Share on tumblr","tumblr",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/social_networks", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"trello",(depth0 != null ? depth0.trello : depth0),"Roadmap",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"code",(depth0 != null ? depth0.github : depth0),"Code",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"language",(depth0 != null ? depth0.transifex : depth0),"Translation",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"pencil",(depth0 != null ? depth0.blog : depth0),"Blog",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"facebook",(depth0 != null ? depth0.facebook : depth0),"Facebook",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.iconLinkText || (depth0 && depth0.iconLinkText) || alias2).call(alias1,"twitter",(depth0 != null ? depth0.twitter : depth0),"Twitter",{"name":"iconLinkText","hash":{},"data":data})) | |
| + "\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/text_field", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <div id=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "Group\">\n <input id=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "Field\" type=\"text\" placeholder=\"" | |
| + alias4(((helper = (helper = helpers.placeholder || (depth0 != null ? depth0.placeholder : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"placeholder","hash":{},"data":data}) : helper))) | |
| + "\" value=\"" | |
| + alias4(((helper = (helper = helpers.value || (depth0 != null ? depth0.value : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"value","hash":{},"data":data}) : helper))) | |
| + "\">\n </div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/toggle_wrap", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class='wrapper " | |
| + alias3(((helper = (helper = helpers.nameBase || (depth0 != null ? depth0.nameBase : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"nameBase","hash":{},"data":data}) : helper))) | |
| + "ToggleWrap right'>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-down",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-up","hidden",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.wrap : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/toggler", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "inverted"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return "checked=\"true\""; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return "<div class=\"toggler-wrapper " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.inverted : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n <span class=\"capitalized\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.label : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <div class=\"toggler\">\n <input id=\"" | |
| + alias3(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\" class=\"toggler-input\" type=\"checkbox\" " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.checked : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ">\n <label for=\"" | |
| + alias3(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\" class=\"toggler-label\"></label>\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/token", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return "<input type=\"text\" style=\"display:none\" id=\"token\" name=\"_csrf\", value=" | |
| + container.escapeExpression(((helper = (helper = helpers.token || (depth0 != null ? depth0.token : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"token","hash":{},"data":data}) : helper))) | |
| + ">"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/topbar", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div id=\"topBar\">\n <nav class=\"top-bar\" data-topbar data-options=\"" | |
| + alias3((helpers.inlineOptions || (depth0 && depth0.inlineOptions) || alias2).call(alias1,(depth0 != null ? depth0.options : depth0),{"name":"inlineOptions","hash":{},"data":data})) | |
| + "\">\n <ul class=\"title-area\">\n <li class=\"name\">\n <h1 id=\"topheader\">\n <a id=\"home\">" | |
| + ((stack1 = (helpers.Q || (depth0 && depth0.Q) || alias2).call(alias1,"Q815410",null,"inventaire",{"name":"Q","hash":{},"data":data})) != null ? stack1 : "") | |
| + " </a></h1>\n </li>\n <li class=\"toggle-topbar menu-icon\">\n <a><span></span></a>\n </li>\n </ul>\n\n <section class=\"top-bar-section\">\n <ul class=\"left\">\n <li id=\"currentUser\" class=\"hidden breadcrumb\">\n <a>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-right",{"name":"icon","hash":{},"data":data})) | |
| + " <span id=\"currentUsername\"></span></a>\n </li>\n </ul>\n <ul id=\"accountMenu\" class=\"right\"></ul>\n </section>\n </nav>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/unselect", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a class=\"unselect\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"unselect",{"name":"i18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"times",{"name":"icon","hash":{},"data":data})) | |
| + "</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/validation_buttons", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"button-group\">\n <a id=\"cancel\" class=\"button grey\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"cancel",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <a id=\"validate\" tabindex=\"0\" class=\"button success\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"validate",{"name":"i18n","hash":{},"data":data})) | |
| + " <span class='loading'></span></a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/vertical_separator", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"vertical-separator separator\">\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"common_separator",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/general/views/templates/wiki_sitelinks", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : {}, alias4=helpers.helperMissing; | |
| return " <span class=\"wikipedia two-buttons\">\n <a href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.wikipedia : depth0)) != null ? stack1.url : stack1), depth0)) | |
| + "\" target=\"_blank\">\n " | |
| + alias2((helpers.icon || (depth0 && depth0.icon) || alias4).call(alias3,"wikipedia",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias2((helpers.I18n || (depth0 && depth0.I18n) || alias4).call(alias3,"see on Wikipedia",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n <a href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.wikipedia : depth0)) != null ? stack1.url : stack1), depth0)) | |
| + "?veaction=edit\" target=\"_blank\">\n " | |
| + alias2((helpers.i18n || (depth0 && depth0.i18n) || alias4).call(alias3,"edit",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </span>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : {}, alias3=helpers.helperMissing; | |
| return " <span class=\"wikisource two-buttons\">\n <a href=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.wikisource : depth0)) != null ? stack1.url : stack1), depth0)) | |
| + "\" target=\"_blank\">\n " | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,"wikisource",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias1((helpers.I18n || (depth0 && depth0.I18n) || alias3).call(alias2,"read online",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n" | |
| + ((stack1 = helpers.unless.call(alias2,(depth0 != null ? depth0.hideWikisourceEpub : depth0),{"name":"unless","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </span>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : {}, alias3=helpers.helperMissing; | |
| return " <a class=\"epub\" href=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.wikisource : depth0)) != null ? stack1.epub : stack1), depth0)) | |
| + "\" target=\"_blank\">\n " | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,"download",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || alias3).call(alias2,"epub",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=container.escapeExpression, alias3=helpers.helperMissing; | |
| return "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.canRefreshData : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n <a class=\"wikidata\" href=\"" | |
| + alias2(container.lambda(((stack1 = (depth0 != null ? depth0.wikidata : depth0)) != null ? stack1.wiki : stack1), depth0)) | |
| + "\" target=\"_blank\">\n " | |
| + alias2((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias1,"wikidata",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias2((helpers.I18n || (depth0 && depth0.I18n) || alias3).call(alias1,"edit data",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.canRefreshData : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| return " <span class=\"wikidata two-buttons\">\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"refreshData\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"refresh_wikidata_data",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"refresh",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"refresh data",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n </span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return "<div class=\"wiki-sitelinks\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikipedia : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikisource : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.wikidata : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/collections/friends_items", function(exports, require, module) { | |
| var Items; | |
| Items = require('./items'); | |
| module.exports = Items.extend({ | |
| friendsItemsToFetch: [], | |
| fetchFriendItems: function(friendModel) { | |
| this.friendsItemsToFetch.push(friendModel.id); | |
| return this.lazyFetchFriendsItems(); | |
| }, | |
| fetchFriendsItems: function() { | |
| var ids; | |
| ids = this.friendsItemsToFetch; | |
| this.friendsItemsToFetch = new Array; | |
| return _.preq.get(app.API.users.items(ids)).then(this.add.bind(this)).always(this.friendsReady.bind(this))["catch"](_.Error('fetchFriendsItems err')); | |
| }, | |
| initialize: function() { | |
| this.lazyFetchFriendsItems = _.debounce(this.fetchFriendsItems, 50); | |
| app.commands.setHandlers({ | |
| 'friends:zero': this.friendsReady.bind(this) | |
| }); | |
| this.on('add', this.updateCounter.bind(this, 1)); | |
| return this.on('remove', this.updateCounter.bind(this, -1)); | |
| }, | |
| friendsReady: function() { | |
| app.vent.trigger('friends:items:ready'); | |
| return this.fetched = true; | |
| }, | |
| inventoryLength: {}, | |
| updateCounter: function(operation, item) { | |
| var base, counter, owner; | |
| owner = item.get('owner'); | |
| if (owner != null) { | |
| counter = (base = this.inventoryLength)[owner] || (base[owner] = 0); | |
| counter += operation; | |
| this.inventoryLength[owner] = counter; | |
| return app.vent.trigger("inventory:" + owner + ":change", counter); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/collections/items", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| model: require("../models/item"), | |
| url: function() { | |
| return app.API.items.base; | |
| }, | |
| comparator: function(item) { | |
| return -item.get('created'); | |
| }, | |
| byOwner: function(ownerId) { | |
| return this.where({ | |
| owner: ownerId | |
| }); | |
| }, | |
| byEntityUri: function(uri) { | |
| return this.where({ | |
| entity: uri | |
| }); | |
| }, | |
| byUsername: function(username) { | |
| var owner; | |
| owner = app.request('get:userId:from:username', username); | |
| return this.where({ | |
| owner: owner | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/inventory", function(exports, require, module) { | |
| var API, AddLayout, Filters, InventoryLayout, ItemCreationForm, ItemShow, ItemsList, Transactions, displayFoundItems, fetchEntityData, fetchItems, findItemById, findItemByUsernameAndEntity, initAddHelpers, initLayout, initializeInventoriesHandlers, itemCreate, itemsCountByEntity, mainUserPrivateInventoryLength, publicById, publicByUsernameAndEntity, ref, requestPublicItem, showGroupInventory, showInventory, showItemShowFromModel, showItemsList, triggerItemsReady, usersPublicItems; | |
| ItemShow = require('./views/item_show'); | |
| Filters = require('./lib/filters'); | |
| Transactions = require('./lib/transactions'); | |
| InventoryLayout = require('./views/inventory'); | |
| ItemCreationForm = require('./views/form/item_creation'); | |
| initLayout = require('./lib/layout'); | |
| AddLayout = require('./views/add/add_layout'); | |
| initAddHelpers = require('./lib/add_helpers'); | |
| ItemsList = require('./views/items_list'); | |
| ref = app.API.items, publicByUsernameAndEntity = ref.publicByUsernameAndEntity, publicById = ref.publicById, usersPublicItems = ref.usersPublicItems; | |
| module.exports = { | |
| define: function(Inventory, app, Backbone, Marionette, $, _) { | |
| var InventoryRouter; | |
| InventoryRouter = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'inventory(/)': 'showGeneralInventory', | |
| 'inventory/nearby': 'showInventoryNearby', | |
| 'inventory/last': 'showInventoryLast', | |
| 'inventory/:username(/)': 'showUserInventory', | |
| 'inventory/:username/:entity(/:title)(/)': 'showUserItemsByEntity', | |
| 'items/:id(/)': 'showItemFromId', | |
| 'items(/)': 'showGeneralInventoryNavigate', | |
| 'add(/)': 'showAddLayout', | |
| 'groups/:id(/:name)(/)': 'showGroupInventory' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new InventoryRouter({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| var Items; | |
| window.Items = Items = require('./items_collections')(app, _); | |
| app.request('waitForUserData').then(fetchItems.bind(null, app)); | |
| Filters.initialize(app); | |
| Transactions(Items); | |
| initializeInventoriesHandlers(app); | |
| initAddHelpers(); | |
| return initLayout(app); | |
| } | |
| }; | |
| API = { | |
| showGeneralInventory: function() { | |
| if (app.request('require:loggedIn', 'inventory')) { | |
| return showInventory({ | |
| generalInventory: true | |
| }); | |
| } | |
| }, | |
| showGeneralInventoryNavigate: function() { | |
| API.showGeneralInventory(); | |
| return app.navigate('inventory'); | |
| }, | |
| showUserInventory: function(user, navigate) { | |
| return showInventory({ | |
| user: user, | |
| navigate: navigate | |
| }); | |
| }, | |
| showGroupInventory: function(id, name, navigate) { | |
| return showInventory({ | |
| group: id, | |
| navigate: navigate | |
| }); | |
| }, | |
| showInventoryNearby: function() { | |
| if (app.request('require:loggedIn', 'inventory/nearby')) { | |
| return showInventory({ | |
| nearby: true | |
| }); | |
| } | |
| }, | |
| showInventoryLast: function() { | |
| if (app.request('require:loggedIn', 'inventory/last')) { | |
| return showInventory({ | |
| last: true | |
| }); | |
| } | |
| }, | |
| showItemCreationForm: function(options) { | |
| var form; | |
| form = new ItemCreationForm(options); | |
| return app.layout.main.show(form); | |
| }, | |
| showItemFromId: function(id) { | |
| if (!_.isItemId(id)) { | |
| return app.execute('show:404'); | |
| } | |
| app.execute('show:loader'); | |
| return findItemById(id).then(showItemShowFromModel)["catch"](function(err) { | |
| if (err.status === 404) { | |
| return app.execute('show:404'); | |
| } else { | |
| return _.error(err, 'showItemFromId'); | |
| } | |
| }); | |
| }, | |
| showUserItemsByEntity: function(username, entity, label) { | |
| if (!(_.isUsername(username) && _.isEntityUri(entity))) { | |
| return app.execute('show:404'); | |
| } | |
| app.execute('show:loader', { | |
| title: label + " - " + username | |
| }); | |
| return fetchEntityData(entity).then(function() { | |
| return app.request('waitForItems'); | |
| }).then(function() { | |
| return findItemByUsernameAndEntity(username, entity); | |
| }).then(displayFoundItems)["catch"](_.Error('showItemShowFromUserAndEntity')); | |
| }, | |
| removeUserItems: function(userId) { | |
| var userItems; | |
| _.log(userId, 'removeUserItems'); | |
| userItems = Items.byOwner(userId); | |
| if ((userItems != null ? userItems.length : void 0) > 0) { | |
| return Items.remove(userItems); | |
| } | |
| }, | |
| showAddLayout: function() { | |
| return app.layout.main.Show(new AddLayout, _.I18n('title_add_layout')); | |
| } | |
| }; | |
| findItemById = function(itemId) { | |
| return app.request('waitForItems').then(Items.byId.bind(Items, itemId)).then(function(item) { | |
| if (item != null) { | |
| return item; | |
| } else { | |
| return _.preq.get(publicById(itemId)).then(Items["public"].add); | |
| } | |
| })["catch"](_.ErrorRethrow('findItemById err (maybe the item was deleted or its visibility changed?)')); | |
| }; | |
| fetchEntityData = function(entity) { | |
| return app.request('get:entity:model', entity); | |
| }; | |
| findItemByUsernameAndEntity = function(username, entity) { | |
| var owner; | |
| owner = app.request('get:userId:from:username', username); | |
| if (app.request('user:isPublicUser', owner)) { | |
| return requestPublicItem(username, entity); | |
| } else { | |
| return Items.where({ | |
| owner: owner, | |
| entity: entity | |
| }); | |
| } | |
| }; | |
| displayFoundItems = function(items) { | |
| _.log(items, 'displayFoundItems items'); | |
| if ((items != null ? items.length : void 0) == null) { | |
| throw new Error('shouldnt be at least an empty array here?'); | |
| } | |
| switch (items.length) { | |
| case 0: | |
| return app.execute('show:404'); | |
| case 1: | |
| return showItemShowFromModel(items[0]); | |
| default: | |
| return showItemsList(items); | |
| } | |
| }; | |
| showInventory = function(options) { | |
| return app.layout.main.show(new InventoryLayout(options)); | |
| }; | |
| showItemsList = function(items) { | |
| var collection; | |
| collection = new Backbone.Collection(items); | |
| return app.layout.main.show(new ItemsList({ | |
| collection: collection | |
| })); | |
| }; | |
| fetchItems = function(app) { | |
| var ref1; | |
| if ((ref1 = app.user) != null ? ref1.loggedIn : void 0) { | |
| Items.fetch({ | |
| reset: true | |
| }).always(triggerItemsReady); | |
| } else { | |
| _.log('user isnt logged in. not fetching items'); | |
| triggerItemsReady(); | |
| } | |
| return app.reqres.setHandlers({ | |
| 'item:create': itemCreate, | |
| 'items:count:byEntity': itemsCountByEntity | |
| }); | |
| }; | |
| triggerItemsReady = function() { | |
| Items.personal.fetched = true; | |
| app.user.itemsFetched = true; | |
| return app.vent.trigger('items:ready'); | |
| }; | |
| requestPublicItem = function(username, entity) { | |
| return _.preq.get(publicByUsernameAndEntity(username, entity)).then(function(res) { | |
| app.execute('users:public:add', res.user); | |
| return Items["public"].add(res.items); | |
| })["catch"](_.Error('requestPublicItem err')); | |
| }; | |
| itemCreate = function(itemData) { | |
| var itemModel, ref1; | |
| if (((ref1 = itemData.entity) != null ? ref1.label : void 0) != null) { | |
| itemData.title = itemData.entity.label; | |
| } | |
| if (!((itemData.title != null) && itemData.title !== '')) { | |
| throw new Error('cant create item: missing title'); | |
| } | |
| itemModel = Items.add(itemData); | |
| _.preq.resolve(itemModel.save()).then(_.Log('item creation server res')).then(itemModel.onCreation.bind(itemModel))["catch"](_.Error('item creation err')); | |
| return itemModel; | |
| }; | |
| itemsCountByEntity = function(uri) { | |
| return Items.where({ | |
| entity: uri | |
| }).length; | |
| }; | |
| showGroupInventory = function(group) { | |
| return API.showGroupInventory(group.id, group.get('name'), true); | |
| }; | |
| showItemShowFromModel = function(item) { | |
| app.layout.main.show(new ItemShow({ | |
| model: item | |
| })); | |
| if (item.pathname != null) { | |
| return app.navigate(item.pathname); | |
| } else { | |
| return _.error(item, 'missing item.pathname'); | |
| } | |
| }; | |
| initializeInventoriesHandlers = function(app) { | |
| app.commands.setHandlers({ | |
| 'show:inventory:general': API.showGeneralInventoryNavigate, | |
| 'show:inventory:user': function(user) { | |
| return API.showUserInventory(user, true); | |
| }, | |
| 'show:inventory:main:user': function() { | |
| return API.showUserInventory(app.user, true); | |
| }, | |
| 'show:inventory:group': showGroupInventory, | |
| 'show:inventory:group:byId': function(groupId) { | |
| var group; | |
| group = app.request('get:group:model:sync', groupId); | |
| return showGroupInventory(group); | |
| }, | |
| 'show:item:creation:form': function(params) { | |
| var entity, entityPathname, pathname, uri; | |
| entity = params.entity; | |
| if (entity == null) { | |
| throw new Error('missing entity'); | |
| } | |
| uri = entity.get('uri'); | |
| entityPathname = params.entity.get('pathname'); | |
| pathname = entityPathname + "/add"; | |
| if (app.request('require:loggedIn', pathname)) { | |
| API.showItemCreationForm(params); | |
| return app.navigate(pathname.replace(/\/add$/, '')); | |
| } | |
| }, | |
| 'show:item:show:from:model': showItemShowFromModel, | |
| 'show:add:layout': function() { | |
| API.showAddLayout(); | |
| return app.navigate('add'); | |
| }, | |
| 'inventory:remove:user:items': function(userId) { | |
| return setTimeout(API.removeUserItems.bind(null, userId), 0); | |
| }, | |
| 'show:inventory:nearby': API.showInventoryNearby, | |
| 'show:inventory:last': API.showInventoryLast, | |
| 'show:items': displayFoundItems | |
| }); | |
| return app.reqres.setHandlers({ | |
| 'item:update': function(options) { | |
| var attribute, data, item, promise, selector, value; | |
| item = options.item, attribute = options.attribute, value = options.value, data = options.data, selector = options.selector; | |
| _.types([item, selector], ['object', 'string|undefined']); | |
| if (data != null) { | |
| _.type(data, 'object'); | |
| item.set(data); | |
| } else { | |
| _.type(attribute, 'string'); | |
| item.set(attribute, value); | |
| } | |
| promise = _.preq.resolve(item.save()); | |
| if (selector != null) { | |
| app.request('waitForCheck', { | |
| promise: promise, | |
| selector: selector | |
| }); | |
| } | |
| return promise; | |
| }, | |
| 'item:destroy': function(options) { | |
| var action, model, next, selector, title; | |
| model = options.model, selector = options.selector, next = options.next; | |
| _.types([model, selector, next], ['object', 'string', 'function']); | |
| title = model.get('title'); | |
| action = function() { | |
| return model.destroy().then(next); | |
| }; | |
| return $(selector).trigger('askConfirmation', { | |
| confirmationText: _.i18n('destroy_item_text', { | |
| title: title | |
| }), | |
| warningText: _.i18n("this action can't be undone"), | |
| action: action | |
| }); | |
| }, | |
| 'get:item:model': findItemById, | |
| 'get:item:model:sync': function(id) { | |
| return Items.byId(id); | |
| }, | |
| 'inventory:main:user:length': function(nonPrivate) { | |
| var fullInventoryLength, privateInventoryLength; | |
| fullInventoryLength = Items.personal.length; | |
| privateInventoryLength = mainUserPrivateInventoryLength(); | |
| if (nonPrivate) { | |
| return fullInventoryLength - privateInventoryLength; | |
| } else { | |
| return fullInventoryLength; | |
| } | |
| }, | |
| 'inventory:user:length': function(userId) { | |
| return Items.inventoryLength[userId]; | |
| }, | |
| 'inventory:user:items': function(userId) { | |
| return Items.where({ | |
| owner: userId | |
| }); | |
| }, | |
| 'inventory:fetch:users:public:items': function(usersIds) { | |
| if (usersIds.length === 0) { | |
| _.warn(usersIds, 'no user ids, no items fetched'); | |
| return _.preq.resolve([]); | |
| } | |
| return _.preq.get(usersPublicItems(usersIds)).then(_.property('items')); | |
| }, | |
| 'item:main:user:instances': function(entityUri) { | |
| return Items.personal.byEntityUri(entityUri); | |
| } | |
| }); | |
| }; | |
| mainUserPrivateInventoryLength = function() { | |
| return Items.personal.where({ | |
| listing: 'private' | |
| }).length; | |
| }; | |
| }); | |
| ;require.register("modules/inventory/items_collections", function(exports, require, module) { | |
| var FriendsItems; | |
| FriendsItems = require('./collections/friends_items'); | |
| module.exports = function(app, _) { | |
| var Items, friends, isFriend, isMainUser, isPublicUser, isntPublicUser, itemsAddProxy, network, personal, publik; | |
| Items = new FriendsItems; | |
| isMainUser = function(model) { | |
| return model.get('owner') === app.user.id; | |
| }; | |
| personal = new FilteredCollection(Items); | |
| personal.filterBy('personal', isMainUser); | |
| personal.add = Items.add.bind(Items); | |
| personal.create = Items.create.bind(Items); | |
| personal.byEntityUri = Items.byEntityUri.bind(personal); | |
| app.user.once('change', function() { | |
| return personal.refilter(); | |
| }); | |
| itemsAddProxy = Items.add.bind(Items); | |
| isFriend = function(model) { | |
| return app.request('user:isFriend', model.get('owner')); | |
| }; | |
| friends = new FilteredCollection(Items).filterBy('friends', isFriend); | |
| friends.fetchFriendItems = Items.fetchFriendItems.bind(Items); | |
| friends.add = itemsAddProxy; | |
| app.vent.once('friends:items:ready', function() { | |
| return friends.fetched = true; | |
| }); | |
| isPublicUser = function(model) { | |
| return app.request('user:isPublicUser', model.get('owner')); | |
| }; | |
| publik = new FilteredCollection(Items).filterBy('public', isPublicUser); | |
| publik.add = itemsAddProxy; | |
| isntPublicUser = function(model) { | |
| return !isPublicUser(model); | |
| }; | |
| network = new FilteredCollection(Items).filterBy('network', isntPublicUser); | |
| network.add = itemsAddProxy; | |
| return _.extend(Items, { | |
| personal: personal, | |
| friends: friends, | |
| "public": publik, | |
| network: network | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/add_helpers", function(exports, require, module) { | |
| var get, set; | |
| set = localStorageProxy.setItem.bind(localStorageProxy); | |
| get = localStorageProxy.getItem.bind(localStorageProxy); | |
| module.exports = function() { | |
| app.commands.setHandlers({ | |
| 'last:add:mode:set': set.bind(null, 'lastAddMode'), | |
| 'last:transaction:set': set.bind(null, 'lastTransaction'), | |
| 'last:listing:set': set.bind(null, 'lastListing') | |
| }); | |
| return app.reqres.setHandlers({ | |
| 'last:add:mode:get': get.bind(null, 'lastAddMode'), | |
| 'last:transaction:get': get.bind(null, 'lastTransaction'), | |
| 'last:listing:get': get.bind(null, 'lastListing') | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/add_users_and_items", function(exports, require, module) { | |
| module.exports = function(itemsCollection, res) { | |
| var err, items, users; | |
| items = res.items, users = res.users; | |
| if (!((items != null ? items.length : void 0) > 0)) { | |
| err = new Error('no public items'); | |
| err.status = 404; | |
| throw err; | |
| } | |
| app.execute('users:public:add', users); | |
| itemsCollection.add(items); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/filters", function(exports, require, module) { | |
| var excludeTransaction, filterInventory, filterInventoryByFriendsAndMainUser, filterInventoryByGroup, filterInventoryByOwner, filterItemsByText, includeTransaction, isntPrivateItem, itemsFiltered, ownedByFriendOrMainUser, singleFilterReady, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| itemsFiltered = require('./items_filtered'); | |
| module.exports = { | |
| initialize: function(app) { | |
| Items.filtered = itemsFiltered(Items); | |
| Items.personal.filtered = itemsFiltered(Items.personal); | |
| Items.friends.filtered = itemsFiltered(Items.friends); | |
| Items["public"].filtered = itemsFiltered(Items["public"]); | |
| Items.network.filtered = itemsFiltered(Items.network); | |
| app.commands.setHandlers({ | |
| 'filter:inventory:owner': filterInventoryByOwner, | |
| 'filter:inventory:friends:and:main:user': filterInventoryByFriendsAndMainUser, | |
| 'filter:inventory:group': filterInventoryByGroup, | |
| 'filter:items:byText': filterItemsByText, | |
| 'filter:inventory:transaction:include': includeTransaction, | |
| 'filter:inventory:transaction:exclude': excludeTransaction | |
| }); | |
| return app.request('waitForFriendsItems').delay(400).then(Items.filtered.refilter.bind(Items.filtered)); | |
| } | |
| }; | |
| filterInventory = function(filterName, filterFn) { | |
| if (!singleFilterReady(filterName)) { | |
| Items.filtered.resetFilters(); | |
| return Items.filtered.filterBy(filterName, filterFn); | |
| } | |
| }; | |
| filterInventoryByOwner = function(owner) { | |
| return filterInventory("owner:" + owner, function(itemModel) { | |
| return itemModel.get('owner') === owner; | |
| }); | |
| }; | |
| ownedByFriendOrMainUser = function(itemModel) { | |
| var ownerId; | |
| ownerId = itemModel.get('owner'); | |
| if (app.request('user:isMainUser', ownerId)) { | |
| return true; | |
| } else if (app.request('user:isFriend', ownerId)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }; | |
| filterInventoryByFriendsAndMainUser = filterInventory.bind(null, 'friendsAndMainUser', ownedByFriendOrMainUser); | |
| filterInventoryByGroup = function(groupModel) { | |
| var allMembersIds, mainUserId; | |
| Items.filtered.resetFilters(); | |
| allMembersIds = groupModel.allMembersIds(); | |
| mainUserId = app.user.id; | |
| return Items.filtered.filterBy('group', function(itemModel) { | |
| var owner; | |
| owner = itemModel.get('owner'); | |
| if (indexOf.call(allMembersIds, owner) < 0) { | |
| return false; | |
| } | |
| if (owner === mainUserId) { | |
| return isntPrivateItem(itemModel); | |
| } else { | |
| return true; | |
| } | |
| }); | |
| }; | |
| isntPrivateItem = function(itemModel) { | |
| return itemModel.get('listing') !== 'private'; | |
| }; | |
| filterItemsByText = function(text, reset) { | |
| return Items.filtered.filterByText(text, reset); | |
| }; | |
| includeTransaction = function(transaction) { | |
| return Items.filtered.removeFilter("exclude:" + transaction); | |
| }; | |
| excludeTransaction = function(transaction) { | |
| return Items.filtered.filterBy("exclude:" + transaction, function(item) { | |
| return item.get('transaction') !== transaction; | |
| }); | |
| }; | |
| singleFilterReady = function(filter) { | |
| var filters; | |
| filters = Items.filtered.getFilters(); | |
| return filters.length === 1 && filters[0] === filter; | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/items_filtered", function(exports, require, module) { | |
| var itemsFilters; | |
| itemsFilters = { | |
| filteredByEntityUri: function(uri) { | |
| return this.filterBy('entityUri', function(model) { | |
| return model.get('entity') === uri; | |
| }); | |
| } | |
| }; | |
| module.exports = function(baseCollection) { | |
| var filteredCollection; | |
| filteredCollection = new FilteredCollection(baseCollection); | |
| return _.extend(filteredCollection, itemsFilters); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/items_per_pages", function(exports, require, module) { | |
| var howManyItemsToFillTheScreen, itemHeight, itemWidth, sideNavWidth; | |
| sideNavWidth = 280; | |
| itemWidth = 200 + 50; | |
| itemHeight = 350; | |
| module.exports = function(margin) { | |
| if (margin == null) { | |
| margin = 5; | |
| } | |
| return howManyItemsToFillTheScreen() + margin; | |
| }; | |
| howManyItemsToFillTheScreen = function() { | |
| var itemPerLine, lines, total; | |
| itemPerLine = Math.floor((window.screen.width - sideNavWidth) / itemWidth); | |
| lines = Math.ceil(window.screen.height / itemHeight); | |
| total = itemPerLine * lines; | |
| if (total < 10) { | |
| total = 10; | |
| } | |
| return total; | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/layout", function(exports, require, module) { | |
| var defaultLayout; | |
| defaultLayout = 'cascade'; | |
| module.exports = function(app) { | |
| var layout, setLayout; | |
| layout = localStorageProxy.getItem('layout') || defaultLayout; | |
| setLayout = function(newLayout) { | |
| layout = newLayout; | |
| return localStorageProxy.setItem('layout', layout); | |
| }; | |
| app.reqres.setHandlers({ | |
| 'inventory:layout': function() { | |
| return layout; | |
| } | |
| }); | |
| return app.vent.on('inventory:layout:change', setLayout); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/lib/transactions", function(exports, require, module) { | |
| module.exports = function(Items) { | |
| Items.transactions = function() { | |
| return { | |
| giving: { | |
| id: 'giving', | |
| icon: 'heart', | |
| label: 'giving', | |
| labelShort: "I'm giving it", | |
| labelPersonalized: 'giving_personalized_strong', | |
| unicodeIcon: '' | |
| }, | |
| lending: { | |
| id: 'lending', | |
| icon: 'refresh', | |
| label: 'lending', | |
| labelShort: "I can lend it", | |
| labelPersonalized: 'lending_personalized_strong', | |
| unicodeIcon: '' | |
| }, | |
| selling: { | |
| id: 'selling', | |
| icon: 'money', | |
| label: 'selling', | |
| labelShort: "I'm selling it", | |
| labelPersonalized: 'selling_personalized_strong', | |
| unicodeIcon: '' | |
| }, | |
| inventorying: { | |
| id: 'inventorying', | |
| icon: 'cube', | |
| label: 'in my inventory', | |
| labelShort: 'in my inventory', | |
| labelPersonalized: 'inventorying_personalized_strong', | |
| unicodeIcon: '' | |
| } | |
| }; | |
| }; | |
| return Items.transactions.data = Object.freeze(Items.transactions()); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/models/item", function(exports, require, module) { | |
| var Filterable; | |
| Filterable = require('modules/general/models/filterable'); | |
| module.exports = Filterable.extend({ | |
| url: function() { | |
| return app.API.items.base; | |
| }, | |
| validate: function(attrs, options) { | |
| if (attrs.title == null) { | |
| return "a title must be provided"; | |
| } | |
| if (attrs.owner == null) { | |
| return "a owner must be provided"; | |
| } | |
| }, | |
| initialize: function(attrs, options) { | |
| var entity, owner, title; | |
| entity = attrs.entity, title = attrs.title, owner = attrs.owner; | |
| if (entity == null) { | |
| throw new Error("item should have an associated entity"); | |
| } | |
| this.entityUri = app.request('normalize:entity:uri', entity); | |
| this.waitForEntity = this.reqGrab('get:entity:model', this.entityUri, 'entity'); | |
| this.set({ | |
| created: this.get('created') || _.now(), | |
| _id: this.getId() | |
| }); | |
| this.setPathname(); | |
| this.entityPathname = app.request('get:entity:local:href', this.entityUri, title); | |
| this.userReady = false; | |
| return this.reqGrab('get:user:model', owner, 'user').then(this.setUserData.bind(this)).then((function(_this) { | |
| return function() { | |
| return _this.waitForEntity; | |
| }; | |
| })(this)).then(this.updateAuthor.bind(this)); | |
| }, | |
| onCreation: function(serverRes) { | |
| this.set(serverRes); | |
| return this.setPathname(); | |
| }, | |
| setUserData: function() { | |
| var user; | |
| user = this.user; | |
| this.username = user.get('username'); | |
| this.authorized = (user.id != null) && user.id === app.user.id; | |
| this.restricted = !this.authorized; | |
| return this.userReady = true; | |
| }, | |
| getId: function() { | |
| return this.get('_id') || 'new'; | |
| }, | |
| setPathname: function() { | |
| return this.pathname = '/items/' + this.id; | |
| }, | |
| serializeData: function() { | |
| var attrs, listing, mainModel, ref, ref1, transacs, transaction; | |
| attrs = this.toJSON(); | |
| _.extend(attrs, { | |
| pathname: this.pathname, | |
| entityData: (ref = this.entity) != null ? ref.toJSON() : void 0, | |
| entityPathname: this.entityPathname, | |
| restricted: this.restricted, | |
| userReady: this.userReady, | |
| user: this.userData() | |
| }); | |
| attrs.cid = this.cid; | |
| transaction = attrs.transaction; | |
| transacs = Items.transactions(); | |
| attrs.currentTransaction = transacs[transaction]; | |
| attrs[transaction] = true; | |
| if (this.authorized) { | |
| attrs.transactions = transacs; | |
| attrs.transactions[transaction].classes = 'selected'; | |
| listing = attrs.listing; | |
| if (listing == null) { | |
| mainModel = app.request('get:item:model:sync', attrs._id); | |
| listing = mainModel != null ? mainModel.get('listing') : void 0; | |
| } | |
| attrs.currentListing = app.user.listings()[listing]; | |
| attrs.listings = app.user.listings(); | |
| attrs.listings[listing].classes = 'selected'; | |
| } else { | |
| attrs.hasActiveTransaction = this.hasActiveTransaction(); | |
| } | |
| attrs.picture = (ref1 = attrs.pictures) != null ? ref1[0] : void 0; | |
| return attrs; | |
| }, | |
| userData: function() { | |
| var user, userData; | |
| if (this.userReady) { | |
| user = this.user; | |
| return userData = { | |
| username: this.username, | |
| picture: user.get('picture'), | |
| pathname: user.get('pathname'), | |
| distance: user.distanceFromMainUser | |
| }; | |
| } | |
| }, | |
| asMatchable: function() { | |
| return [this.get('title'), this.get('authors'), this.username, this.get('details'), this.get('notes'), this.get('entity')]; | |
| }, | |
| destroy: function() { | |
| var url; | |
| this.trigger('destroy', this, this.collection); | |
| url = _.buildPath(this.url(), { | |
| id: this.id, | |
| rev: this.get('_rev') | |
| }); | |
| return _.preq["delete"](url); | |
| }, | |
| updateMetadata: function() { | |
| return this.waitForEntity.then((function(_this) { | |
| return function() { | |
| return _this.entity.updateMetadata(); | |
| }; | |
| })(this)).then(this.executeMetadataUpdate.bind(this)); | |
| }, | |
| executeMetadataUpdate: function() { | |
| var ref, ref1; | |
| return app.execute('metadata:update', { | |
| title: this.findBestTitle(), | |
| description: (ref = this.findBestDescription()) != null ? ref.slice(0, 501) : void 0, | |
| image: (ref1 = this.get('pictures')) != null ? ref1[0] : void 0, | |
| url: this.pathname | |
| }); | |
| }, | |
| findBestTitle: function() { | |
| var context, title, transaction; | |
| title = this.get('title'); | |
| transaction = this.get('transaction'); | |
| context = _.i18n(transaction + "_personalized", { | |
| username: this.username | |
| }); | |
| return title + " - " + context; | |
| }, | |
| findBestDescription: function() { | |
| var details; | |
| details = this.get('details'); | |
| if (_.isNonEmptyString(details)) { | |
| return details; | |
| } | |
| }, | |
| updateAuthor: function() { | |
| var current; | |
| if (this.restricted) { | |
| return; | |
| } | |
| current = this.get('authors'); | |
| return this.entity.getAuthorsString().then((function(_this) { | |
| return function(update) { | |
| if (_.isNonEmptyString(update) && current !== update) { | |
| _.log([current, update], 'updateAuthor'); | |
| return _this.save('authors', update); | |
| } | |
| }; | |
| })(this))["catch"](_.Error('updateAuthor')); | |
| }, | |
| hasActiveTransaction: function() { | |
| return app.request('has:transactions:ongoing:byItemId', this.id); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/plugins/item_actions", function(exports, require, module) { | |
| var events, handlers; | |
| handlers = { | |
| itemShow: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:item:show:from:model', this.model); | |
| } | |
| }, | |
| showUser: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:user', this.model.username); | |
| } | |
| }, | |
| showTransaction: function(e) { | |
| var transac; | |
| if (!_.isOpenedOutside(e)) { | |
| transac = app.request('get:transaction:ongoing:byItemId', this.model.id); | |
| return app.execute('show:transaction', transac.id); | |
| } | |
| } | |
| }; | |
| events = { | |
| 'click a.itemShow': 'itemShow', | |
| 'click a.user': 'showUser', | |
| 'click a.userShow': 'showUser', | |
| 'click a.mainUserRequested': 'showTransaction' | |
| }; | |
| module.exports = _.BasicPlugin(events, handlers); | |
| }); | |
| ;require.register("modules/inventory/plugins/item_updaters", function(exports, require, module) { | |
| var error_; | |
| error_ = require('lib/error'); | |
| module.exports = function() { | |
| _.extend(this.events, { | |
| 'click a.transaction': 'updateTransaction', | |
| 'click a.listing': 'updateListing', | |
| 'click a.remove': 'itemDestroy' | |
| }); | |
| _.extend(this, { | |
| updateTransaction: function(e) { | |
| return this.updateItem('transaction', e.target.id); | |
| }, | |
| updateListing: function(e) { | |
| return this.updateItem('listing', e.target.id); | |
| }, | |
| updateItem: function(attribute, value) { | |
| if (!((attribute != null) && (value != null))) { | |
| return _.preq.reject(error_["new"]('invalid item udpate', arguments)); | |
| } | |
| return app.request('item:update', { | |
| item: this.model, | |
| attribute: attribute, | |
| value: value | |
| }); | |
| }, | |
| itemDestroy: function() { | |
| var afterDestroy, cb; | |
| afterDestroy = this.afterDestroy || (cb = function() { | |
| return console.log('item deleted'); | |
| }); | |
| return app.request('item:destroy', { | |
| model: this.model, | |
| selector: this.uniqueSelector, | |
| next: afterDestroy | |
| }); | |
| } | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/side_nav/lib/headers", function(exports, require, module) { | |
| module.exports = { | |
| "public": { | |
| id: 'publicListHeader', | |
| label: 'public books' | |
| }, | |
| groups: { | |
| id: 'groupsListHeader', | |
| label: 'groups' | |
| }, | |
| members: { | |
| id: 'membersListHeader', | |
| label: 'group members' | |
| }, | |
| users: { | |
| id: 'usersListHeader', | |
| label: 'friends' | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/inventory/side_nav/views/side_nav", function(exports, require, module) { | |
| var Group, GroupsList, UserLi, UserProfile, UsersList, UsersSearch, headersData; | |
| UserLi = require('modules/users/views/user_li'); | |
| UsersList = require('modules/users/views/users_list'); | |
| UserProfile = require('./user_profile'); | |
| GroupsList = require('modules/network/views/groups_list'); | |
| Group = require('modules/network/views/group'); | |
| UsersSearch = require('modules/network/plugins/users_search'); | |
| headersData = require('../lib/headers'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'innerNav', | |
| template: require('./templates/side_nav'), | |
| regions: { | |
| one: '#one', | |
| groupsList: '#groupsList', | |
| membersList: '#membersList', | |
| mainUser: '#mainUser' | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| ui: { | |
| two: '#two', | |
| friendsSection: '#usersListHeader, #usersList', | |
| usersList: '#usersList', | |
| usersToggler: '#usersListHeader .listToggler', | |
| groupsSection: '#groupsListHeader, #groupsList', | |
| groupsList: '#groupsList', | |
| groupsToggler: '#groups .listToggler', | |
| publicSection: '#publicListHeader, #publicList', | |
| publicList: '#publicList', | |
| publicToggler: '#public .listToggler', | |
| membersSection: '#membersListHeader, #membersList', | |
| membersList: '#membersList', | |
| membersToggler: '#members .listToggler', | |
| memberSearch: '#memberSearch', | |
| nearby: 'li.nearby', | |
| last: 'li.last', | |
| togglers: '.toggler' | |
| }, | |
| initialize: function() { | |
| this.initPlugins(); | |
| this.listenTo(app.vent, { | |
| 'sidenav:show:base': this.showBase.bind(this), | |
| 'sidenav:show:user': this.showUser.bind(this), | |
| 'sidenav:show:group': this.showGroup.bind(this) | |
| }); | |
| return this.lazyMemberFilter = _.debounce(this.updateMemberFilter, 100); | |
| }, | |
| initPlugins: function() { | |
| return UsersSearch.call(this); | |
| }, | |
| events: { | |
| 'keyup #memberField': 'lazyMemberFilter', | |
| 'click .listHeader': 'toggleListHeader', | |
| 'click #nearby': 'showInventoryNearby', | |
| 'click #last': 'showInventoryLast' | |
| }, | |
| serializeData: function() { | |
| return _.extend(headersData, { | |
| smallScreen: _.smallScreen() | |
| }); | |
| }, | |
| showBase: function(active) { | |
| this._listReady = false; | |
| this._usersListShown = false; | |
| this._groupsListShown = false; | |
| this._publicListShown = false; | |
| this.showMainUser(); | |
| this.ui.two.show(); | |
| this.ui.membersSection.hide(); | |
| this.ui.memberSearch.hide(); | |
| this.ui.publicSection.removeClass('force-hidden'); | |
| this.ui.publicSection.show(); | |
| this.ui.groupsSection.removeClass('force-hidden'); | |
| this.ui.groupsSection.show(); | |
| this.ui.friendsSection.removeClass('force-hidden'); | |
| this.ui.friendsSection.show(); | |
| switch (active) { | |
| case 'last': | |
| case 'nearby': | |
| this.ui[active].addClass('active'); | |
| } | |
| if (_.smallScreen()) { | |
| return app.request('waitForUserData').then(this.initBaseSmallScreen.bind(this)); | |
| } else { | |
| this.showUsersList(); | |
| this.showPublicList(); | |
| return app.request('waitForUserData').then(this.showGroupsList.bind(this)).then(this.initBaseSmallScreen.bind(this)); | |
| } | |
| }, | |
| initBaseSmallScreen: function() { | |
| this._listReady = true; | |
| return this.ui.togglers.show(); | |
| }, | |
| showUser: function(userModel) { | |
| this.ui.two.hide(); | |
| return this.one.show(new UserProfile({ | |
| model: userModel | |
| })); | |
| }, | |
| showMainUser: function() { | |
| return this.mainUser.show(new UserLi({ | |
| model: app.user | |
| })); | |
| }, | |
| showUsersList: function() { | |
| this._usersListShown = true; | |
| this.ui.friendsSection.show(); | |
| this.showUsersSearchBase(); | |
| return this.adjustHeight(app.users.friends, this.ui.usersList); | |
| }, | |
| showGroupsList: function() { | |
| this._groupsListShown = true; | |
| this.ui.groupsSection.show(); | |
| this.groupsList.show(new GroupsList({ | |
| collection: app.user.groups.mainUserMember | |
| })); | |
| return this.adjustHeight(app.user.groups.mainUserMember, this.ui.groupsList); | |
| }, | |
| adjustHeight: function(collection, $el) { | |
| var offsetHeight, ref, scrollHeight; | |
| if (collection.length > 1) { | |
| ref = $el[0], offsetHeight = ref.offsetHeight, scrollHeight = ref.scrollHeight; | |
| if (scrollHeight > offsetHeight) { | |
| return $el.addClass('expend'); | |
| } | |
| } | |
| }, | |
| showPublicList: function() { | |
| this._publicListShown = true; | |
| return this.ui.publicSection.show(); | |
| }, | |
| showGroup: function(groupModel) { | |
| this._membersListShown = false; | |
| this._currentGroup = groupModel; | |
| if (_.smallScreen()) { | |
| this.one.show(new Group({ | |
| model: groupModel, | |
| highlighted: true | |
| })); | |
| } else { | |
| this.showMembersList(); | |
| this.ui.userSearch.hide(); | |
| this.ui.memberSearch.show(); | |
| } | |
| this.ui.groupsSection.hide(); | |
| this.ui.friendsSection.hide(); | |
| this.ui.membersSection.removeClass('force-hidden'); | |
| this.ui.membersSection.show(); | |
| this.setGroupHeader(groupModel); | |
| return this.initBaseSmallScreen(); | |
| }, | |
| showMembersList: function() { | |
| this._membersListShown = true; | |
| return this.membersList.show(new UsersList({ | |
| collection: this._currentGroup.members, | |
| textFilter: true, | |
| emptyViewMessage: "can't find any group member with that name" | |
| })); | |
| }, | |
| updateMemberFilter: function(e) { | |
| var text; | |
| text = e.currentTarget.value; | |
| return this.membersList.currentView.trigger('filter:text', text); | |
| }, | |
| setGroupHeader: function(group) { | |
| return this.ui.usersListHeader.find('.header').text(_.i18n('group members')); | |
| }, | |
| toggleListHeader: function(e) { | |
| var id; | |
| if (this._listReady && _.smallScreen()) { | |
| id = e.currentTarget.id; | |
| switch (id) { | |
| case 'usersListHeader': | |
| this.toggleUserSearch(); | |
| return this.toggleList('users', this._usersListShown); | |
| case 'groupsListHeader': | |
| return this.toggleList('groups', this._groupsListShown); | |
| case 'membersListHeader': | |
| this.toggleList('members', this._membersListShown); | |
| return this.ui.memberSearch.toggle(); | |
| case 'publicListHeader': | |
| return this.toggleList('public', this._publicListShown); | |
| default: | |
| return _.error(id, 'unknown list header'); | |
| } | |
| } | |
| }, | |
| toggleList: function(name, shown) { | |
| if (shown) { | |
| this.ui[name + "List"].slideToggle(200); | |
| return this.ui[name + "Toggler"].toggle(); | |
| } else { | |
| this.showList(name); | |
| return this.ui[name + "Toggler"].toggle(); | |
| } | |
| }, | |
| showList: function(name) { | |
| switch (name) { | |
| case 'users': | |
| return this.showUsersList(); | |
| case 'groups': | |
| return this.showGroupsList(); | |
| case 'members': | |
| return this.showMembersList(); | |
| case 'public': | |
| return this.showPublicList(); | |
| default: | |
| return _.error(name, 'unknown list'); | |
| } | |
| }, | |
| toggleUserSearch: function() { | |
| if (this._usersListShown) { | |
| return this.ui.userSearch.toggle(); | |
| } else { | |
| return this.ui.userSearch.show(); | |
| } | |
| }, | |
| showInventoryNearby: function() { | |
| return app.execute('show:inventory:nearby'); | |
| }, | |
| showInventoryLast: function() { | |
| return app.execute('show:inventory:last'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/side_nav/views/user_profile", function(exports, require, module) { | |
| var formatErr, forms_, parseGroupData, relationsActions; | |
| forms_ = require('modules/general/lib/forms'); | |
| relationsActions = require('modules/users/plugins/relations_actions'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/user_profile'), | |
| events: { | |
| 'click #editBio': 'editBio', | |
| 'click #saveBio': 'saveBio', | |
| 'click #cancelBio': 'cancelBio', | |
| 'click #editPicture': 'editPicture', | |
| 'click a#changePicture': 'changePicture', | |
| 'click a.showGroup': 'showGroup', | |
| 'click #showPositionPicker': function() { | |
| return app.execute('show:position:picker:main:user'); | |
| } | |
| }, | |
| behaviors: { | |
| AlertBox: {}, | |
| SuccessCheck: {}, | |
| Loading: {}, | |
| ElasticTextarea: {}, | |
| ConfirmationModal: {}, | |
| PreventDefault: {}, | |
| Unselect: {} | |
| }, | |
| ui: { | |
| bio: '.bio', | |
| bioText: 'textarea.bio' | |
| }, | |
| initialize: function() { | |
| this.isMainUser = this.model.isMainUser; | |
| this.listenTo(this.model, 'change', this.render.bind(this)); | |
| return this.initPlugin(); | |
| }, | |
| initPlugin: function() { | |
| return relationsActions.call(this); | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.serializeData(), { | |
| onUserProfile: true, | |
| loggedIn: app.user.loggedIn, | |
| commonGroups: this.commonGroupsData(), | |
| visitedGroups: this.visitedGroupsData(), | |
| distance: this.model.distanceFromMainUser | |
| }); | |
| }, | |
| onShow: function() { | |
| this.makeRoom(); | |
| this.updateBreadCrumb(); | |
| return this.listenTo(app.vent, 'inventory:change', this.destroyOnInventoryChange); | |
| }, | |
| destroyOnInventoryChange: function(username) { | |
| if (username !== this.model.get('username')) { | |
| return this.$el.slideUp(500, this.destroy.bind(this)); | |
| } | |
| }, | |
| onDestroy: function() { | |
| this.giveRoomBack(); | |
| return this.notifyBreadCrumb(); | |
| }, | |
| makeRoom: function() { | |
| return $('#one').addClass('notEmpty'); | |
| }, | |
| giveRoomBack: function() { | |
| return $('#one').removeClass('notEmpty'); | |
| }, | |
| updateBreadCrumb: function() { | |
| return app.execute('current:username:set', this.model.get('username')); | |
| }, | |
| notifyBreadCrumb: function() { | |
| return app.execute('current:username:hide'); | |
| }, | |
| editBio: function() { | |
| return this.ui.bio.toggle(); | |
| }, | |
| cancelBio: function() { | |
| return this.ui.bio.toggle(); | |
| }, | |
| saveBio: function() { | |
| var bio; | |
| bio = this.ui.bioText.val(); | |
| return _.preq.start.then(this.testBio.bind(null, bio)).then(this.updateUserBio.bind(null, bio)).then(this.ui.bio.toggle.bind(this.ui.bio))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| testBio: function(bio) { | |
| if (bio.length > 1000) { | |
| return formatErr(new Error("the bio can't be longer than 1000 characters")); | |
| } | |
| }, | |
| updateUserBio: function(bio) { | |
| return app.request('user:update', { | |
| attribute: 'bio', | |
| value: bio, | |
| selector: '#usernameButton' | |
| })["catch"](formatErr); | |
| }, | |
| changePicture: require('modules/user/lib/change_user_picture'), | |
| commonGroupsData: function() { | |
| return this._requestGroupData('get:groups:common'); | |
| }, | |
| visitedGroupsData: function() { | |
| return this._requestGroupData('get:groups:others:visited'); | |
| }, | |
| _requestGroupData: function(request) { | |
| var groups; | |
| if (this.isMainUser) { | |
| return; | |
| } | |
| groups = app.request(request, this.model).map(parseGroupData); | |
| if (groups.length > 0) { | |
| return groups; | |
| } else { | |
| return null; | |
| } | |
| }, | |
| showGroup: function(e) { | |
| var groupId; | |
| if (!_.isOpenedOutside(e)) { | |
| groupId = e.currentTarget.attributes['data-id'].value; | |
| return app.execute('show:inventory:group:byId', groupId); | |
| } | |
| } | |
| }); | |
| parseGroupData = function(group) { | |
| return { | |
| id: group.id, | |
| name: group.get('name'), | |
| pathname: group.get('pathname') | |
| }; | |
| }; | |
| formatErr = function(err) { | |
| err.selector = 'textarea.bio'; | |
| throw err; | |
| }; | |
| }); | |
| ;require.register("modules/inventory/views/add/add_layout", function(exports, require, module) { | |
| var scanner, searchInputData; | |
| searchInputData = require('modules/general/views/menu/search_input_data'); | |
| scanner = require('lib/scanner'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/add_layout'), | |
| id: 'addLayout', | |
| initialize: function() { | |
| return this.loggedIn = app.user.loggedIn; | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = { | |
| search: searchInputData('localSearch', true), | |
| loggedIn: this.loggedIn | |
| }; | |
| if (_.isMobile) { | |
| attrs.scanner = scanner.url; | |
| } | |
| return attrs; | |
| }, | |
| behaviors: { | |
| PreventDefault: {}, | |
| ElasticTextarea: {}, | |
| LocalSeachBar: {} | |
| }, | |
| events: { | |
| 'click #scanner': 'setAddModeScan' | |
| }, | |
| setAddModeScan: function() { | |
| return app.execute('last:add:mode:set', 'scan'); | |
| }, | |
| onShow: function() { | |
| var msg; | |
| if (!this.loggedIn) { | |
| msg = 'you need to be connected to add a book to your inventory'; | |
| return app.execute('show:call:to:connection', msg); | |
| } | |
| }, | |
| onDestroy: function() { | |
| if (!this.loggedIn) { | |
| return app.execute('modal:close'); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/comment", function(exports, require, module) { | |
| var forms_; | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/comment'), | |
| className: "comment " + this.cid, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.toJSON(); | |
| attrs.cid = this.cid; | |
| attrs.user = this.userData(attrs.user); | |
| return attrs; | |
| }, | |
| userData: function(userId) { | |
| var ref; | |
| return (ref = app.request('get:userModel:from:userId', userId)) != null ? ref.toJSON() : void 0; | |
| }, | |
| behaviors: { | |
| AlertBox: {}, | |
| ConfirmationModal: {}, | |
| ElasticTextarea: {} | |
| }, | |
| initialize: function() { | |
| this.uniqueSelector = "" + this.cid; | |
| return this.listenTo(this.model, 'change', this.render); | |
| }, | |
| ui: { | |
| core: '.core', | |
| displayed: 'span.message', | |
| editor: 'textarea.message', | |
| menu: '.icon-buttons' | |
| }, | |
| events: { | |
| 'click .edit': 'editComment', | |
| 'click .delete': 'requestDeletion', | |
| 'click .cancelButton': 'toggleEditMode', | |
| 'keyup textarea.message': 'escapeEditMode', | |
| 'click .saveButton': 'saveEdit', | |
| 'dblclick span.message': 'editCommentIfMobile' | |
| }, | |
| onShow: function() { | |
| return app.execute('foundation:reload'); | |
| }, | |
| editComment: function() { | |
| this.toggleEditMode(); | |
| return this.ui.editor.focus(); | |
| }, | |
| editCommentIfMobile: function() { | |
| if (_.isMobile) { | |
| return this.editComment(); | |
| } | |
| }, | |
| requestDeletion: function() { | |
| return app.request('comments:delete', this.model, this); | |
| }, | |
| escapeEditMode: function(e) { | |
| if (_.escapeKeyPressed(e)) { | |
| return this.toggleEditMode(); | |
| } | |
| }, | |
| toggleEditMode: function() { | |
| this.trigger('edit:toggle'); | |
| this.ui.core.toggle(); | |
| return this.ui.menu.toggle(); | |
| }, | |
| saveEdit: function() { | |
| var newMessage; | |
| newMessage = this.ui.editor.val(); | |
| app.request('comments:update', this.model, newMessage)["catch"](this.saveFail.bind(this, newMessage)); | |
| return this.trigger('edit:toggle'); | |
| }, | |
| saveFail: function(newMessage, err) { | |
| err.selector = 'textarea.message'; | |
| return forms_.alert(this, err); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/controls", function(exports, require, module) { | |
| var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/controls'), | |
| className: 'controls', | |
| ui: { | |
| filter: 'input.filter', | |
| layoutTogglers: '.layouts a', | |
| cascade: '.cascade', | |
| grid: '.grid' | |
| }, | |
| serializeData: function() { | |
| return { | |
| transactions: this.transactionsData() | |
| }; | |
| }, | |
| transactionsData: function() { | |
| return _.values(Items.transactions()).map(function(transaction) { | |
| var label; | |
| label = transaction.label; | |
| transaction.title = "show/hide \"" + label + "\" books"; | |
| return transaction; | |
| }); | |
| }, | |
| events: { | |
| 'keyup input.filter': 'filterItems', | |
| 'click .cascade': 'displayCascade', | |
| 'click .grid': 'displayGrid', | |
| 'click .showControls': 'toggleControls', | |
| 'click a.transaction': 'toggleTransaction' | |
| }, | |
| initialize: function() { | |
| return this.lastFilter = null; | |
| }, | |
| onRender: function() { | |
| this.setActiveLayout(); | |
| return this.recoverControls(); | |
| }, | |
| setActiveLayout: function(layout) { | |
| this.ui.layoutTogglers.removeClass('active'); | |
| layout = layout || app.request('inventory:layout'); | |
| return this.ui[layout].addClass('active'); | |
| }, | |
| displayCascade: function() { | |
| app.vent.trigger('inventory:layout:change', 'cascade'); | |
| return this.setActiveLayout('cascade'); | |
| }, | |
| displayGrid: function() { | |
| app.vent.trigger('inventory:layout:change', 'grid'); | |
| return this.setActiveLayout('grid'); | |
| }, | |
| filterItems: function() { | |
| var text; | |
| text = this.ui.filter.val(); | |
| if (text !== this.lastFilter) { | |
| this.lastFilter = text; | |
| return app.execute('filter:items:byText', text, false); | |
| } | |
| }, | |
| toggleControls: function() { | |
| if (this.$el.hasClass('displayed')) { | |
| return this.wrapControls(); | |
| } else { | |
| return this.displayControls(); | |
| } | |
| }, | |
| recoverControls: function() { | |
| var bool; | |
| bool = JSON.parse(localStorageProxy.getItem('controls:display')); | |
| if (bool) { | |
| return this.displayControls(); | |
| } else { | |
| return this.wrapControls(); | |
| } | |
| }, | |
| displayControls: function() { | |
| this.$el.addClass('displayed'); | |
| return localStorageProxy.setItem('controls:display', true); | |
| }, | |
| wrapControls: function() { | |
| this.$el.removeClass('displayed'); | |
| return localStorageProxy.setItem('controls:display', false); | |
| }, | |
| toggleTransaction: function(e) { | |
| var classes, transac; | |
| classes = e.currentTarget.attributes["class"].value.split(' '); | |
| transac = classes[0]; | |
| if (indexOf.call(classes, 'active') >= 0) { | |
| $(e.currentTarget).removeClass('active'); | |
| return app.execute('filter:inventory:transaction:exclude', transac); | |
| } else { | |
| $(e.currentTarget).addClass('active'); | |
| return app.execute('filter:inventory:transaction:include', transac); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/form/item_creation", function(exports, require, module) { | |
| var EntityData, scanner; | |
| EntityData = require('modules/entities/views/entity_data'); | |
| scanner = require('lib/scanner'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/item_creation'), | |
| className: 'addEntity', | |
| regions: { | |
| entityRegion: '#entity' | |
| }, | |
| behaviors: { | |
| ElasticTextarea: {} | |
| }, | |
| ui: { | |
| 'transaction': '#transaction', | |
| 'listing': '#listing', | |
| 'details': '#details', | |
| 'notes': '#notes' | |
| }, | |
| initialize: function() { | |
| this.entity = this.options.entity; | |
| return this.createItem(); | |
| }, | |
| createItem: function() { | |
| var attrs, pictures; | |
| attrs = { | |
| title: this.entity.get('title'), | |
| entity: this.entity.get('uri'), | |
| transaction: this.guessTransaction(), | |
| listing: this.guessListing() | |
| }; | |
| if (pictures = this.entity.get('pictures')) { | |
| attrs.pictures = pictures; | |
| } | |
| attrs.owner = app.user.id; | |
| if (!((attrs.entity != null) && (attrs.title != null))) { | |
| throw new Error('missing uri or title at item creation from entity'); | |
| } | |
| return this.model = app.request('item:create', attrs); | |
| }, | |
| guessTransaction: function() { | |
| var transaction; | |
| transaction = this.options.transaction || app.request('last:transaction:get'); | |
| app.execute('last:transaction:set', transaction); | |
| return transaction; | |
| }, | |
| guessListing: function() { | |
| return app.request('last:listing:get'); | |
| }, | |
| onShow: function() { | |
| app.execute('foundation:reload'); | |
| this.selectTransaction(); | |
| this.selectListing(); | |
| return this.showEntityData(); | |
| }, | |
| onDestroy: function() { | |
| var listing, transaction; | |
| listing = this.model.get('listing'); | |
| transaction = this.model.get('transaction'); | |
| return app.execute('track:item', 'create', listing, transaction); | |
| }, | |
| selectTransaction: function() { | |
| return this.selectButton('transaction'); | |
| }, | |
| selectListing: function() { | |
| return this.selectButton('listing'); | |
| }, | |
| selectButton: function(attr) { | |
| var $el, value; | |
| value = this.model.get(attr); | |
| if (value != null) { | |
| $el = this.ui[attr].find("a[id=" + value + "]"); | |
| if ($el.length === 1) { | |
| this.ui[attr].find('a').removeClass('active'); | |
| return $el.addClass('active'); | |
| } | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs, title; | |
| title = this.entity.get('title'); | |
| attrs = { | |
| title: title, | |
| listings: this.listingsData(), | |
| transactions: this.transactionsData(), | |
| header: _.i18n('add_item_text', { | |
| title: title | |
| }) | |
| }; | |
| attrs = this.setAddModeSpecificAttr(attrs); | |
| return attrs; | |
| }, | |
| listingsData: function() { | |
| var listings; | |
| listings = app.user.listings(); | |
| listings["private"].classes = 'active'; | |
| return listings; | |
| }, | |
| transactionsData: function() { | |
| var transactions; | |
| transactions = Items.transactions(); | |
| _.extend(transactions.inventorying, { | |
| label: 'just_inventorize_it', | |
| classes: 'active' | |
| }); | |
| return transactions; | |
| }, | |
| setAddModeSpecificAttr: function(attrs) { | |
| if (_.isMobile) { | |
| this._addMode = app.request('last:add:mode:get'); | |
| if (this._addMode === 'scan') { | |
| attrs.scanner = scanner; | |
| } | |
| } | |
| return attrs; | |
| }, | |
| events: { | |
| 'click .select-button-group > .button': 'updateSelector', | |
| 'click #transaction': 'updateTransaction', | |
| 'click #listing': 'updateListing', | |
| 'click #cancel': 'destroyItem', | |
| 'click #validate': 'validateSimple', | |
| 'click #validateAndAddNext': 'validateAndAddNext' | |
| }, | |
| showEntityData: function() { | |
| return this.entityRegion.show(new EntityData({ | |
| model: this.entity | |
| })); | |
| }, | |
| updateSelector: function(e) { | |
| var $el; | |
| $el = $(e.currentTarget); | |
| $el.siblings().removeClass('active'); | |
| return $el.addClass('active'); | |
| }, | |
| updateTransaction: function() { | |
| var transaction; | |
| transaction = this.ui.transaction.find('.active').attr('id'); | |
| app.execute('last:transaction:set', transaction); | |
| return this.updateItem({ | |
| transaction: transaction | |
| })["catch"](_.Error('updateTransaction err')); | |
| }, | |
| updateListing: function() { | |
| var listing; | |
| listing = this.ui.listing.find('.active').attr('id'); | |
| app.execute('last:listing:set', listing); | |
| return this.updateItem({ | |
| listing: listing | |
| })["catch"](_.Error('updateListing err')); | |
| }, | |
| updateDetails: function() { | |
| return this.updateTextAttribute('details'); | |
| }, | |
| updateNotes: function() { | |
| return this.updateTextAttribute('notes'); | |
| }, | |
| updateTextAttribute: function(attr) { | |
| var update, val; | |
| _.log(arguments, 'updateTextAttribute'); | |
| val = this.ui[attr].val(); | |
| update = {}; | |
| update[attr] = val; | |
| return this.updateItem(update)["catch"](_.Error('updateTextAttribute err')); | |
| }, | |
| validateSimple: function() { | |
| return this.validateItem().then(function() { | |
| return app.execute('show:inventory:main:user'); | |
| })["catch"](_.Error('validateSimple err')); | |
| }, | |
| validateAndAddNext: function() { | |
| return this.validateItem().then(this.addNext.bind(this))["catch"](_.Error('validateAndAddNext err')); | |
| }, | |
| addNext: function() { | |
| return app.execute('show:add:layout'); | |
| }, | |
| validateItem: function() { | |
| return this.updateItem({ | |
| details: this.ui.details.val(), | |
| notes: this.ui.notes.val() | |
| }); | |
| }, | |
| updateItem: function(data) { | |
| return app.request('item:update', { | |
| item: this.model, | |
| data: data | |
| }); | |
| }, | |
| destroyItem: function() { | |
| return this.model.destroy().then(function() { | |
| return window.history.back(); | |
| })["catch"](_.Error('destroyItem err')); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/inventory", function(exports, require, module) { | |
| var CheckViewState, Controls, Group, ItemsCollection, ItemsGrid, ItemsList, PositionWelcome, SideNav, addUsersAndItems, catchDestroyedView, fetchUserPublicItems, gridMinWidth, navigateToUserInventory, prepareUserItemsList, ref, showLastPublicItems, updateInventoryMetadata; | |
| SideNav = require('../side_nav/views/side_nav'); | |
| ItemsList = require('./items_list'); | |
| ItemsGrid = require('./items_grid'); | |
| ItemsCollection = require('modules/inventory/collections/items'); | |
| Controls = require('./controls'); | |
| Group = require('modules/network/views/group'); | |
| showLastPublicItems = require('modules/welcome/lib/show_last_public_items'); | |
| addUsersAndItems = require('modules/inventory/lib/add_users_and_items'); | |
| PositionWelcome = require('modules/map/views/position_welcome'); | |
| ref = require('lib/view_state'), CheckViewState = ref.CheckViewState, catchDestroyedView = ref.catchDestroyedView; | |
| gridMinWidth = 750; | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'inventory', | |
| template: require('./templates/inventory'), | |
| regions: { | |
| sideNav: '#sideNav', | |
| header: '#header', | |
| itemsView: '#itemsView', | |
| controls: '#controls' | |
| }, | |
| initialize: function() { | |
| return this.listenTo(app.vent, 'inventory:layout:change', this.showItemsListStep3.bind(this)); | |
| }, | |
| onShow: function() { | |
| this.showSideNav(); | |
| this.showItemsListOnceData(); | |
| if (_.smallScreen()) { | |
| if (this.options.user != null) { | |
| return _.scrollTop('#sideNav'); | |
| } else { | |
| return _.scrollTop('#itemsView'); | |
| } | |
| } | |
| }, | |
| showSideNav: function() { | |
| return this.sideNav.show(new SideNav); | |
| }, | |
| showItemsListOnceData: function() { | |
| app.execute('metadata:update:needed'); | |
| return app.request('waitForData').then(CheckViewState(this, 'inventory')).then(this.showItemsList.bind(this)).then(app.execute.bind(app, 'metadata:update:done'))["catch"](catchDestroyedView)["catch"](_.Error('showItemsListOnceData err')); | |
| }, | |
| showItemsList: function() { | |
| var group, last, nearby, ref1, user; | |
| ref1 = this.options, user = ref1.user, group = ref1.group, nearby = ref1.nearby, last = ref1.last; | |
| if (nearby) { | |
| if (app.user.hasPosition()) { | |
| this.showItemsNearby(); | |
| } else { | |
| this.showPositionWelcome(); | |
| } | |
| app.vent.trigger('sidenav:show:base', 'nearby'); | |
| app.navigate('inventory/nearby'); | |
| return; | |
| } | |
| if (last) { | |
| this.showLastPublicItems(); | |
| app.vent.trigger('sidenav:show:base', 'last'); | |
| app.navigate('inventory/last'); | |
| return; | |
| } | |
| if (user != null) { | |
| return app.request('resolve:to:userModel', user).then(this.showItemsListStep2.bind(this))["catch"](function(err) { | |
| _.error(err, 'resolve:to:userModel err'); | |
| return app.execute('show:404'); | |
| }); | |
| } else if (group != null) { | |
| return app.request('get:group:model', group).then(this.showItemsListStep2.bind(this, null))["catch"](function(err) { | |
| _.error(err, 'get:group:model err'); | |
| return app.execute('show:404'); | |
| }); | |
| } else { | |
| return this.showItemsListStep2(); | |
| } | |
| }, | |
| showItemsListStep2: function(user, group) { | |
| var eventName, generalInventory, isMainUser, navigate, ref1; | |
| ref1 = this.options, navigate = ref1.navigate, generalInventory = ref1.generalInventory; | |
| if (Items.length === 0) { | |
| isMainUser = user != null ? app.request('user:isMainUser', user.id) : false; | |
| if (generalInventory || isMainUser) { | |
| this.showInventoryWelcome(user); | |
| if (isMainUser) { | |
| navigateToUserInventory(user); | |
| app.vent.trigger('sidenav:show:user', user); | |
| } else { | |
| app.vent.trigger('sidenav:show:base'); | |
| } | |
| return; | |
| } | |
| } | |
| if (user != null) { | |
| prepareUserItemsList(user, navigate); | |
| eventName = user.get('username'); | |
| user.updateMetadata(); | |
| } else if (group != null) { | |
| this.prepareGroupItemsList(group, navigate); | |
| eventName = "group:" + group.id; | |
| group.updateMetadata(); | |
| } else { | |
| app.vent.trigger('sidenav:show:base'); | |
| app.execute('filter:inventory:friends:and:main:user'); | |
| eventName = 'general'; | |
| updateInventoryMetadata(); | |
| } | |
| this.showItemsListStep3(); | |
| return app.vent.trigger('inventory:change', eventName); | |
| }, | |
| showItemsListStep3: function() { | |
| var ItemsListView, itemsList; | |
| ItemsListView = this.getItemsListView(); | |
| itemsList = new ItemsListView({ | |
| collection: Items.filtered | |
| }); | |
| this.itemsView.show(itemsList); | |
| return this.showControls(); | |
| }, | |
| getItemsListView: function() { | |
| switch (app.request('inventory:layout')) { | |
| case 'cascade': | |
| return ItemsList; | |
| case 'grid': | |
| return ItemsGrid; | |
| default: | |
| throw new Error('unknow items list layout'); | |
| } | |
| }, | |
| showInventoryWelcome: function(user) { | |
| var inventoryWelcome; | |
| inventoryWelcome = require('./inventory_welcome'); | |
| this.header.show(new inventoryWelcome); | |
| return this.showLastPublicItems(); | |
| }, | |
| showLastPublicItems: function() { | |
| return showLastPublicItems({ | |
| region: this.itemsView, | |
| limit: 25, | |
| allowMore: true | |
| })["catch"](_.Error('showLastPublicItems err')); | |
| }, | |
| showControls: function() { | |
| if (!_.smallScreen(gridMinWidth)) { | |
| return this.controls.show(new Controls); | |
| } | |
| }, | |
| prepareGroupItemsList: function(group, navigate) { | |
| var pathname; | |
| app.execute('filter:inventory:group', group); | |
| app.vent.trigger('sidenav:show:group', group); | |
| if (!_.smallScreen()) { | |
| this.header.show(new Group({ | |
| model: group, | |
| highlighted: true | |
| })); | |
| } | |
| pathname = group.get('pathname'); | |
| if (navigate) { | |
| return app.navigate(pathname); | |
| } else { | |
| return app.navigateReplace(pathname); | |
| } | |
| }, | |
| showItemsNearby: function() { | |
| var items; | |
| items = new ItemsCollection; | |
| return _.preq.get(app.API.users.publicItemsNearby()).then(_.Log('showItemsNearby res')).then(addUsersAndItems.bind(null, items)).then((function(_this) { | |
| return function() { | |
| return _this.itemsView.show(new ItemsList({ | |
| collection: items, | |
| showDistance: true | |
| })); | |
| }; | |
| })(this))["catch"](_.Error('showItemsNearby')); | |
| }, | |
| showPositionWelcome: function() { | |
| return this.itemsView.show(new PositionWelcome); | |
| } | |
| }); | |
| prepareUserItemsList = function(user, navigate) { | |
| var username; | |
| if (!app.request('user:itemsFetched', user)) { | |
| fetchUserPublicItems(user); | |
| } | |
| username = user.get('username'); | |
| app.execute('filter:inventory:owner', user.id); | |
| app.vent.trigger('sidenav:show:user', user); | |
| if (navigate) { | |
| return navigateToUserInventory(user); | |
| } | |
| }; | |
| navigateToUserInventory = function(user) { | |
| return app.navigate(user.get('pathname')); | |
| }; | |
| fetchUserPublicItems = function(user) { | |
| var cb, removeUserItems; | |
| app.request('inventory:fetch:users:public:items', user.id).then(_.Log('public user public items')).then(Items["public"].add)["catch"](_.Error('fetchUserPublicItems')); | |
| removeUserItems = function() { | |
| return app.execute('inventory:remove:user:items', user.id); | |
| }; | |
| cb = function() { | |
| return app.vent.once('inventory:change', removeUserItems); | |
| }; | |
| return setTimeout(cb, 500); | |
| }; | |
| updateInventoryMetadata = function() { | |
| return app.execute('metadata:update', { | |
| title: _.I18n('title_browse_layout'), | |
| url: '/inventory' | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/inventory/views/inventory_welcome", function(exports, require, module) { | |
| var NoItem; | |
| NoItem = require('./no_item'); | |
| module.exports = Marionette.ItemView.extend({ | |
| className: "inventoryWelcome", | |
| template: require('./templates/inventory_welcome'), | |
| events: { | |
| 'click #jumpIn': function() { | |
| return app.execute('show:joyride:welcome:tour'); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/item_comments", function(exports, require, module) { | |
| var behaviorsPlugin, forms_, loginPlugin, messagesPlugin; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| messagesPlugin = require('modules/general/plugins/messages'); | |
| forms_ = require('modules/general/lib/forms'); | |
| loginPlugin = require('modules/general/plugins/login'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| className: 'itemComments panel', | |
| template: require('./templates/item_comments'), | |
| childViewContainer: '.comments', | |
| childView: require('./comment'), | |
| initialize: function() { | |
| var ref; | |
| ref = app.request('comments:init', this.model), this.collection = ref[0], this.fetching = ref[1]; | |
| return this.initPlugins(); | |
| }, | |
| initPlugins: function() { | |
| _.extend(this, behaviorsPlugin, messagesPlugin); | |
| if (!app.user.loggedIn) { | |
| return loginPlugin.call(this); | |
| } | |
| }, | |
| events: { | |
| 'click .postComment': 'postComment' | |
| }, | |
| childEvents: { | |
| 'edit:toggle': 'toggleNewComment' | |
| }, | |
| behaviors: { | |
| AlertBox: {}, | |
| Loading: {}, | |
| ElasticTextarea: {} | |
| }, | |
| ui: { | |
| message: 'textarea.message', | |
| newCommentDiv: '.newComment' | |
| }, | |
| serializeData: function() { | |
| return { | |
| user: app.user.toJSON(), | |
| loggedIn: app.user.loggedIn | |
| }; | |
| }, | |
| onShow: function() { | |
| if (this.fetching != null) { | |
| this.startLoading(); | |
| return this.fetching["finally"](this.stopLoading.bind(this)); | |
| } | |
| }, | |
| postComment: function() { | |
| return this.postMessage('comments:post', this.model.comments); | |
| }, | |
| toggleNewComment: function() { | |
| return this.ui.newCommentDiv.toggle(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/item_figure", function(exports, require, module) { | |
| var detailsLimit, itemActions, itemUpdaters; | |
| itemActions = require('../plugins/item_actions'); | |
| itemUpdaters = require('../plugins/item_updaters'); | |
| detailsLimit = 150; | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'figure', | |
| className: function() { | |
| var busy; | |
| this.uniqueSelector = "." + this.cid; | |
| busy = this.model.get('busy') ? 'busy' : ''; | |
| return "itemContainer " + this.cid + " " + busy; | |
| }, | |
| template: require('./templates/item_figure'), | |
| behaviors: { | |
| PreventDefault: {}, | |
| ConfirmationModal: {} | |
| }, | |
| initialize: function() { | |
| this.initPlugins(); | |
| this.lazyRender = _.LazyRender(this, 400); | |
| this.listenTo(this.model, 'change', this.lazyRender); | |
| return this.listenTo(this.model, 'grab:entity', this.lazyRender); | |
| }, | |
| initPlugins: function() { | |
| itemActions.call(this); | |
| return itemUpdaters.call(this); | |
| }, | |
| onRender: function() { | |
| app.execute('foundation:reload'); | |
| return app.execute('qlabel:update'); | |
| }, | |
| events: { | |
| 'click .edit': 'itemEdit', | |
| 'click a.requestItem': function() { | |
| return app.execute('show:item:request', this.model); | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs, ref; | |
| attrs = this.model.serializeData(); | |
| attrs.date = { | |
| date: attrs.created | |
| }; | |
| attrs.detailsMore = this.detailsMoreData(attrs.details); | |
| attrs.details = this.detailsData(attrs.details); | |
| attrs.showDistance = this.options.showDistance && (((ref = attrs.user) != null ? ref.distance : void 0) != null); | |
| return attrs; | |
| }, | |
| itemEdit: function() { | |
| return app.execute('show:item:form:edition', this.model); | |
| }, | |
| detailsMoreData: function(details) { | |
| if ((details != null ? details.length : void 0) > detailsLimit) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| }, | |
| detailsData: function(details) { | |
| if ((details != null ? details.length : void 0) > detailsLimit) { | |
| return _.cutBeforeWord(details, detailsLimit) + " ..."; | |
| } else { | |
| return details; | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/item_row", function(exports, require, module) { | |
| var itemActions; | |
| itemActions = require('../plugins/item_actions'); | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'tr', | |
| template: require('./templates/item_row'), | |
| behaviors: { | |
| PreventDefault: {}, | |
| PlainTextAuthorLink: {} | |
| }, | |
| initialize: function() { | |
| return this.initPlugins(); | |
| }, | |
| initPlugins: function() { | |
| return itemActions.call(this); | |
| }, | |
| serializeData: function() { | |
| return this.model.serializeData(); | |
| }, | |
| onRender: function() { | |
| return app.execute('qlabel:update'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/item_show", function(exports, require, module) { | |
| var ChangePicture, EntityData, ItemComments, ItemTransactions, PicturePicker, itemActions, itemUpdaters; | |
| ItemComments = require('./item_comments'); | |
| ItemTransactions = require('./item_transactions'); | |
| EntityData = require('modules/entities/views/entity_data'); | |
| PicturePicker = require('modules/general/views/behaviors/picture_picker'); | |
| ChangePicture = require('modules/general/views/behaviors/change_picture'); | |
| itemActions = require('../plugins/item_actions'); | |
| itemUpdaters = require('../plugins/item_updaters'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'itemShowLayout', | |
| template: require('./templates/item_show'), | |
| regions: { | |
| entityRegion: '#entity', | |
| pictureRegion: '#picture', | |
| transactionsRegion: '#transactions', | |
| commentsRegion: '#comments' | |
| }, | |
| behaviors: { | |
| PreventDefault: {}, | |
| ConfirmationModal: {}, | |
| ElasticTextarea: {} | |
| }, | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| this.initPlugins(); | |
| this.uniqueSelector = '#' + this.id; | |
| this.listenTo(this.model, 'change:details', this.lazyRender); | |
| this.listenTo(this.model, 'change:notes', this.lazyRender); | |
| this.listenTo(this.model, 'add:pictures', this.lazyRender); | |
| this.listenTo(this.model, 'grab:user', this.lazyRender); | |
| return app.execute('metadata:update:needed'); | |
| }, | |
| initPlugins: function() { | |
| itemActions.call(this); | |
| return itemUpdaters.call(this); | |
| }, | |
| onRender: function() { | |
| this.showEntityData(); | |
| this.showPicture(); | |
| this.showComments(); | |
| app.execute('foundation:reload'); | |
| if (app.user.loggedIn) { | |
| return this.showTransactions(); | |
| } | |
| }, | |
| onShow: function() { | |
| return this.model.updateMetadata()["finally"](app.execute.bind(app, 'metadata:update:done')); | |
| }, | |
| showEntityData: function() { | |
| var entity; | |
| entity = this.model.entity; | |
| if (entity != null) { | |
| return this.showEntity(entity); | |
| } else { | |
| return this.listenTo(this.model, 'grab:entity', this.showEntity.bind(this)); | |
| } | |
| }, | |
| showEntity: function(entity) { | |
| return this.entityRegion.show(new EntityData({ | |
| model: entity, | |
| hidePicture: true | |
| })); | |
| }, | |
| showPicture: function() { | |
| var picture; | |
| picture = new ChangePicture({ | |
| model: this.model | |
| }); | |
| return this.pictureRegion.show(picture); | |
| }, | |
| events: { | |
| 'click a#destroy': 'itemDestroy', | |
| 'click a#changePicture': 'changePicture', | |
| 'click a#editDetails, a#cancelDetailsEdition': 'toggleDetailsEditor', | |
| 'click a#validateDetails': 'validateDetails', | |
| 'click a#editNotes, a#cancelNotesEdition': 'toggleNotesEditor', | |
| 'click a#validateNotes': 'validateNotes', | |
| 'click a.requestItem': function() { | |
| return app.execute('show:item:request', this.model); | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.serializeData(); | |
| return _.extend(attrs, { | |
| nextPictures: this.nextPicturesData(attrs) | |
| }); | |
| }, | |
| nextPicturesData: function(attrs) { | |
| var ref; | |
| if (((ref = attrs.pictures) != null ? ref.length : void 0) > 1) { | |
| return attrs.pictures.slice(1); | |
| } | |
| }, | |
| itemEdit: function() { | |
| return app.execute('show:item:form:edition', this.model); | |
| }, | |
| changePicture: function() { | |
| var picturePicker; | |
| picturePicker = new PicturePicker({ | |
| pictures: this.model.get('pictures'), | |
| limit: 1, | |
| save: this.savePicture.bind(this) | |
| }); | |
| return app.layout.modal.show(picturePicker); | |
| }, | |
| savePicture: function(value) { | |
| return app.request('item:update', { | |
| item: this.model, | |
| attribute: 'pictures', | |
| value: value | |
| }); | |
| }, | |
| itemDestroy: function() { | |
| return app.request('item:destroy', { | |
| model: this.model, | |
| selector: this.uniqueSelector, | |
| next: function() { | |
| return app.execute('show:home'); | |
| } | |
| }); | |
| }, | |
| toggleDetailsEditor: function() { | |
| return this.toggleEditor('details'); | |
| }, | |
| toggleNotesEditor: function() { | |
| return this.toggleEditor('notes'); | |
| }, | |
| validateDetails: function() { | |
| return this.validateEdit('details'); | |
| }, | |
| validateNotes: function() { | |
| return this.validateEdit('notes'); | |
| }, | |
| toggleEditor: function(nameBase) { | |
| $("#" + nameBase).toggle(); | |
| return $("#" + nameBase + "Editor").toggle(); | |
| }, | |
| validateEdit: function(nameBase) { | |
| var edited; | |
| this.toggleEditor(nameBase); | |
| edited = $("#" + nameBase + "Editor textarea").val(); | |
| if (edited !== this.model.get(nameBase)) { | |
| return app.request('item:update', { | |
| item: this.model, | |
| attribute: nameBase, | |
| value: edited, | |
| selector: "#" + nameBase + "Editor" | |
| }); | |
| } | |
| }, | |
| showComments: function() { | |
| return this.commentsRegion.show(new ItemComments({ | |
| model: this.model | |
| })); | |
| }, | |
| showTransactions: function() { | |
| if (this.transactions == null) { | |
| this.transactions = app.request('get:transactions:ongoing:byItemId', this.model.id); | |
| } | |
| return this.transactionsRegion.show(new ItemTransactions({ | |
| collection: this.transactions | |
| })); | |
| }, | |
| afterDestroy: function() { | |
| return app.execute('show:inventory:main:user'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/item_transactions", function(exports, require, module) { | |
| module.exports = Marionette.CompositeView.extend({ | |
| className: 'itemTransactions', | |
| template: require('./templates/item_transactions'), | |
| childViewContainer: '.transactions', | |
| childView: require('modules/transactions/views/transaction_preview'), | |
| childViewOptions: { | |
| onItem: true | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/items_grid", function(exports, require, module) { | |
| module.exports = Marionette.CompositeView.extend({ | |
| className: 'itemsGrid', | |
| template: require('./templates/items_grid'), | |
| childViewContainer: 'tbody', | |
| childView: require('./item_row'), | |
| emptyView: require('./no_item') | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/items_list", function(exports, require, module) { | |
| var behaviorsPlugin, itemsPerPage, masonryPlugin, paginationPlugin; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| paginationPlugin = require('modules/general/plugins/pagination'); | |
| masonryPlugin = require('modules/general/plugins/masonry'); | |
| itemsPerPage = require('modules/inventory/lib/items_per_pages'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| className: 'itemsListWrapper', | |
| template: require('./templates/items_list'), | |
| childViewContainer: '.itemsList', | |
| childView: require('./item_figure'), | |
| emptyView: require('./no_item'), | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| ui: { | |
| itemsList: '.itemsList' | |
| }, | |
| childViewOptions: function() { | |
| return { | |
| showDistance: this.options.showDistance | |
| }; | |
| }, | |
| initialize: function() { | |
| return this.initPlugins(); | |
| }, | |
| initPlugins: function() { | |
| _.extend(this, behaviorsPlugin); | |
| paginationPlugin.call(this, { | |
| batchLength: itemsPerPage(), | |
| fetchMore: this.options.fetchMore, | |
| more: this.options.more | |
| }); | |
| return masonryPlugin.call(this, '.itemsList', '.itemContainer'); | |
| }, | |
| serializeData: function() { | |
| return { | |
| header: this.options.header | |
| }; | |
| }, | |
| events: { | |
| 'inview .more': 'infiniteScroll' | |
| }, | |
| collectionEvents: { | |
| 'render': 'stopLoading', | |
| 'filtered:add': 'lazyMasonryRefresh' | |
| }, | |
| childEvents: { | |
| 'render': 'lazyMasonryRefresh', | |
| 'resize': 'lazyMasonryRefresh' | |
| }, | |
| infiniteScroll: function() { | |
| if (this.more()) { | |
| this.startLoading('.more'); | |
| return this.displayMore(); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/no_item", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: "div", | |
| className: "text-center hidden", | |
| template: require('./templates/no_item'), | |
| onShow: function() { | |
| return this.$el.fadeIn(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/inventory/views/templates/comment", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <span class=\"edited core\">\n - <a title=\"" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.edited : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edited",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"avatar\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),50,{"name":"src","hash":{},"data":data})) | |
| + "\">\n</div>\n\n<div class=\"rest\">\n\n <div class=\"header\">\n <div class=\"core\">\n <span class=\"username\">" | |
| + alias3(container.lambda(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "</span>\n <span class=\"message\">" | |
| + alias3((helpers.userContent || (depth0 && depth0.userContent) || alias2).call(alias1,(depth0 != null ? depth0.message : depth0),{"name":"userContent","hash":{},"data":data})) | |
| + "</span>\n </div>\n <div class=\"core hidden\">\n <form>\n <textarea class=\"message\" name=\"message\" placeholder=\"edit comment...\">" | |
| + alias3(((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"message","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n <div class=\"right\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"save_cancel",{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n </form>\n </div>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:comment_edit_menu",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n <div>\n <span class=\"time core\">" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.created : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</span>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.edited : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/comment_edit_menu", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <a class=\"menu\" data-options=\"align:left\" data-dropdown=\"" | |
| + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"cid","hash":{},"data":data}) : helper))) | |
| + "-menu\" title=\"" | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit",{"name":"i18n","hash":{},"data":data})) | |
| + "\" aria-autoclose=\"true\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.editRight : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </a>\n <ul id=\"" | |
| + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"cid","hash":{},"data":data}) : helper))) | |
| + "-menu\" class=\"tiny f-dropdown\" data-dropdown-content>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.editRight : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <li>\n <a class=\"delete\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"times",{"name":"icon","hash":{},"data":data})) | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"delete",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </li>\n </ul>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.icon || (depth0 && depth0.icon) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"pencil",{"name":"icon","hash":{},"data":data})) | |
| + "\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.icon || (depth0 && depth0.icon) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"times",{"name":"icon","hash":{},"data":data})) | |
| + "\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <li>\n <a class=\"edit\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"pencil",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </li>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return "<div class=\"icon-buttons\">\n" | |
| + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.deleteRight : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/controls", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <a class=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + " transaction active\" title=\"" | |
| + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + "\">" | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a class=\"showControls\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"wrench",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-right",{"name":"icon","hash":{},"data":data})) | |
| + "\n</a>\n<div class=\"innerControls\">\n <div class=\"layouts\">\n <a class=\"cascade\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"th-large",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n <a class=\"grid\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"align-justify",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n </div>\n <div class=\"transactions\">\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.transactions : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <input type=\"text\" class=\"filter\" placeholder=\"filter...\">\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/inventory", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div id=\"innerMain\">\n <div id=\"sideNav\" class=\"sideNavClones\"></div>\n <div id=\"shadowSideNav\" class=\"sideNavClones\"></div>\n <div id=\"inventoryView\">\n <div id=\"header\"></div>\n <div id=\"itemsView\">" | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"loader",{"name":"partial","hash":{},"data":data})) | |
| + "</div>\n <div id=\"controls\"></div>\n </div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/inventory_welcome", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h2>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"welcome in your inventory!",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n<div>\n <a id=\"jumpIn\" class=\"button secondary radius bold\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"get a tour",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n</div>\n<div>\n <a class=\"showWelcome\" class=\"grey\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"back to welcome screen",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_comments", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"local-fog\">\n <p>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"you need to be connected to comment",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n <div class=\"login-buttons\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:login_buttons",{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n </div>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " <img src=\"" | |
| + container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),50,{"name":"src","hash":{},"data":data})) | |
| + "\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"comments\">\n <div class=\"loading\"></div>\n</div>\n\n<div class=\"newComment\">\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <form>\n <div class=\"main\">\n <div class=\"avatar\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <textarea class=\"message ctrlEnterClick\" name=\"message\" placeholder=\"post a comment...\">" | |
| + alias3(((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"message","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n </div>\n <div class=\"alertBox\"></div>\n <div class=\"bottom\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"ctrl_enter_click_tip",{"name":"partial","hash":{},"data":data})) | |
| + "\n <a class=\"tiny-success-button postComment right\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"post comment",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n </form>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_details", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a id=\"editDetails\" class=\"editButton\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit",{"name":"i18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"pencil",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n <span data-tooltip class=\"has-tip indicator\"\n title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"this is visible by anyone who can see this item",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.currentListing : depth0)) != null ? stack1.icon : stack1),{"name":"icon","hash":{},"data":data})) | |
| + "\n </span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"detailsPanel panel\">\n <div class=\"icon-buttons-header\">\n <label>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"details",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <div class=\"right\">\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.restricted : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n </div>\n <p id=\"details\" class=\"user-content\">\n " | |
| + alias3((helpers.userContent || (depth0 && depth0.userContent) || alias2).call(alias1,(depth0 != null ? depth0.details : depth0),{"name":"userContent","hash":{},"data":data})) | |
| + "\n </p>\n <div id=\"detailsEditor\" class='hidden'>\n <textarea placeholder='(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"details_placeholder",{"name":"i18n","hash":{},"data":data})) | |
| + ")'>" | |
| + alias3(((helper = (helper = helpers.details || (depth0 != null ? depth0.details : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"details","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n <div class=\"button-group-right\">\n <a id=\"cancelDetailsEdition\" class=\"cancelButton\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"cancel",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <a id=\"validateDetails\" class=\"validateButton\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n </div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_figure", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"busy-sign\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"unavailable",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"sign-out",{"name":"icon","hash":{},"data":data})) | |
| + "\n </div>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " <img src=\"" | |
| + container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.picture : depth0),300,{"name":"src","hash":{},"data":data})) | |
| + "\">\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + container.escapeExpression((helpers.claim || (depth0 && depth0.claim) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.entityData : depth0)) != null ? stack1.claims : stack1),"P50",{"name":"claim","hash":{},"data":data})) | |
| + "\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + ((stack1 = (helpers.joinAuthors || (depth0 && depth0.joinAuthors) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.entityData : depth0)) != null ? stack1.authors : stack1),false,{"name":"joinAuthors","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.restricted : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.program(12, data, 0),"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.details : depth0),{"name":"if","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(alias1,"inventory:item_request_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"10":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"inventory:item_mixed_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"12":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_user_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n <div class=\"item-settings itemBox\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_transaction_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_visibility_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n"; | |
| },"14":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return " <div class=\"detailsBox\">\n <span class=\"details wrapped user-content\">\n " | |
| + container.escapeExpression((helpers.userContent || (depth0 && depth0.userContent) || helpers.helperMissing).call(alias1,(depth0 != null ? depth0.details : depth0),{"name":"userContent","hash":{},"data":data})) | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.detailsMore : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </span>\n </div>\n"; | |
| },"15":function(container,depth0,helpers,partials,data) { | |
| return " <a class='itemShow more'>" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"see more",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.busy : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<a class=\"itemShow\" href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" rel=\"nofollow\">\n <div class=\"cover\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.picture : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"data\">\n <h3 class=\"title\">\n " | |
| + alias4(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + "\n </h3>\n <hr>\n <div class=\"authors\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.entityData : depth0)) != null ? stack1.wikidata : stack1),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n </div>\n</a>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.userReady : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_mixed_box", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return " <span class=\"distance\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"km_away",(depth0 != null ? depth0.user : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : {}, alias4=helpers.helperMissing; | |
| return "<div class=\"mixedBox\">\n <a href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\" class=\"userShow\">\n <img class=\"profilePic\" src=\"" | |
| + alias2((helpers.src || (depth0 && depth0.src) || alias4).call(alias3,((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),48,{"name":"src","hash":{},"data":data})) | |
| + "\">\n </a>\n <a class=\"itemShow\">\n <div class=\"transactionBox " | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.id : stack1), depth0)) | |
| + "\">\n " | |
| + alias2((helpers.icon || (depth0 && depth0.icon) || alias4).call(alias3,((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.icon : stack1),{"name":"icon","hash":{},"data":data})) | |
| + "\n </div>\n </a>\n</div>\n<div class=\"labelBox " | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.id : stack1), depth0)) | |
| + "\">\n <a class=\"itemShow label\">\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias4).call(alias3,((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.labelPersonalized : stack1),(depth0 != null ? depth0.user : depth0),{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n </a>\n" | |
| + ((stack1 = helpers["if"].call(alias3,(depth0 != null ? depth0.showDistance : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_note", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"noteBox dark-panel\">\n <div class=\"icon-buttons-header\">\n <label>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"private notes",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <div class=\"right\">\n <a id=\"editNotes\" class=\"editButton\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit notes",{"name":"i18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"pencil",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_notes_lock",{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n </div>\n <p id=\"notes\" class=\"user-content\">\n " | |
| + alias3((helpers.userContent || (depth0 && depth0.userContent) || alias2).call(alias1,(depth0 != null ? depth0.notes : depth0),{"name":"userContent","hash":{},"data":data})) | |
| + "\n </p>\n <div id=\"notesEditor\" class='hidden'>\n <textarea placeholder='(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"notes_placeholder",{"name":"i18n","hash":{},"data":data})) | |
| + ")'>" | |
| + alias3(((helper = (helper = helpers.notes || (depth0 != null ? depth0.notes : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"notes","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n <div class=\"button-group-right\">\n <a id=\"cancelNotesEdition\" class=\"cancelButton\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"cancel",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <a id=\"validateNotes\" class=\"validateButton\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_notes_lock", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<span data-tooltip class=\"has-tip indicator\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"notes_placeholder",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"lock",{"name":"icon","hash":{},"data":data})) | |
| + "\n</span>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_request_box", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.busy : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"busy-box\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"sign-out",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"unavailable",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </div>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.hasActiveTransaction : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(7, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| return " <a class=\"mainUserRequested\">\n " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"main_user_requested",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.inventorying : depth0),{"name":"unless","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"8":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"itemBox\">\n <a class=\"requestItem\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"comments",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"send request",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </div>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.restricted : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_row", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + container.escapeExpression((helpers.claim || (depth0 && depth0.claim) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.entityData : depth0)) != null ? stack1.claims : stack1),"P50",true,true,{"name":"claim","hash":{},"data":data})) | |
| + "\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + ((stack1 = (helpers.joinAuthors || (depth0 && depth0.joinAuthors) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.entityData : depth0)) != null ? stack1.authors : stack1),{"name":"joinAuthors","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda; | |
| return "<td class=\"title itemShow\">\n <a class=\"link itemShow\">" | |
| + alias3(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"title","hash":{},"data":data}) : helper))) | |
| + "</a>\n</td>\n<td class=\"authors\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.entityData : depth0)) != null ? stack1.wikidata : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") | |
| + "</td>\n<td class=\"user\">\n <a class=\"user link serif\" href=\"" | |
| + alias3(alias4(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),16,{"name":"src","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3(alias4(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "\n </a>\n</td>\n<td>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.transaction : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</td>\n<td>" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.created : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</td>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_show", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " <div class=\"entityData\">\n <h2>" | |
| + container.escapeExpression(((helper = (helper = helpers.title || (depth0 != null ? depth0.title : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"title","hash":{},"data":data}) : helper))) | |
| + "</h2>\n </div>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.restricted : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_mixed_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_request_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_user_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n <div class=\"item-settings itemBox\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_transaction_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_visibility_box",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:remove_item",{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n"; | |
| },"8":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.restricted : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.program(12, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.details : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"10":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"inventory:item_details",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"12":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_note",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory:item_details",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div id=\"entityData\">\n <div id=\"picture\"></div>\n <div id=\"entity\">\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.entityData : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"icon-bar\">\n <a href=\"" | |
| + alias4(((helper = (helper = helpers.entityPathname || (depth0 != null ? depth0.entityPathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"entityPathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"showEntity\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"cube",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span>" | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"who else has it?",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </a>\n <a class=\"shareLink\" href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"share-alt",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span>" | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"share",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </a>\n </div>\n</div>\n\n<div class=\"itemData\">\n <div class=\"leftBox\">\n <div class=\"panel\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.userReady : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div id=\"transactions\"></div>\n </div>\n <div class=\"rightBox\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.userReady : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <div id=\"comments\"></div>\n </div>\n</div>\n" | |
| + alias4((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:embedded_welcome",{"name":"partial","hash":{},"data":data})); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_transaction_box", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"current itemShow\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.icon : stack1),{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.labelShort : stack1),{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <a class=\"current\" data-dropdown=\"" | |
| + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"cid","hash":{},"data":data}) : helper))) | |
| + "-t-menu\">\n <span class=\"icon\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.icon : stack1),{"name":"icon","hash":{},"data":data})) | |
| + "\n </span>\n <span class=\"rest\">\n <span class=\"label\">" | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.labelShort : stack1),{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"caret-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n </span>\n </a>\n <ul id=\"" | |
| + alias4(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"cid","hash":{},"data":data}) : helper))) | |
| + "-t-menu\" data-options=\"align:right\"\n class=\"tiny f-dropdown\" data-dropdown-content>\n <li class=\"label2 capitalized\">" | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"available for",{"name":"i18n","hash":{},"data":data})) | |
| + ":</li>\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.transactions : depth0),{"name":"each","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </ul>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <li>\n <a id=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\" class=\"transaction " | |
| + alias4(((helper = (helper = helpers.classes || (depth0 != null ? depth0.classes : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"classes","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.label : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </li>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return "<div class=\"transactionBox " | |
| + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.currentTransaction : depth0)) != null ? stack1.id : stack1), depth0)) | |
| + "\">\n" | |
| + ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.restricted : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") | |
| + "</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_transactions", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"transactions\"></div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_user_box", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression; | |
| return "<a class=\"user\" href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\">\n <div class=\"userBox\">\n <img class=\"profilePic\" src=\"" | |
| + alias2((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),48,{"name":"src","hash":{},"data":data})) | |
| + "\">\n <span class=\"user\" href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\">\n <strong class=\"username\">" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "</strong>\n </span>\n </div>\n</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/item_visibility_box", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : {}, alias3=helpers.helperMissing, alias4="function"; | |
| return " <div class=\"listingMenu " | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.currentListing : depth0)) != null ? stack1.id : stack1), depth0)) | |
| + "\">\n <a class=\"current\" data-dropdown=\"" | |
| + alias1(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias3),(typeof helper === alias4 ? helper.call(alias2,{"name":"cid","hash":{},"data":data}) : helper))) | |
| + "-l-menu\">\n <span class=\"icon\">" | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,((stack1 = (depth0 != null ? depth0.currentListing : depth0)) != null ? stack1.icon : stack1),{"name":"icon","hash":{},"data":data})) | |
| + "</span>\n <span class=\"rest\">\n <span class=\"label\">" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || alias3).call(alias2,((stack1 = (depth0 != null ? depth0.currentListing : depth0)) != null ? stack1.label : stack1),{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n " | |
| + alias1((helpers.icon || (depth0 && depth0.icon) || alias3).call(alias2,"caret-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n </span>\n </a>\n <ul id=\"" | |
| + alias1(((helper = (helper = helpers.cid || (depth0 != null ? depth0.cid : depth0)) != null ? helper : alias3),(typeof helper === alias4 ? helper.call(alias2,{"name":"cid","hash":{},"data":data}) : helper))) | |
| + "-l-menu\" data-options=\"align:right\"\n class=\"tiny f-dropdown\" data-dropdown-content>\n <li class=\"label2 capitalized\">" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || alias3).call(alias2,"change visibility:",{"name":"i18n","hash":{},"data":data})) | |
| + "</li>\n" | |
| + ((stack1 = helpers.each.call(alias2,(depth0 != null ? depth0.listings : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <li><label>" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || alias3).call(alias2,"other operations:",{"name":"i18n","hash":{},"data":data})) | |
| + "</label></li>\n <li>\n " | |
| + alias1((helpers.partial || (depth0 && depth0.partial) || alias3).call(alias2,"inventory:remove_item",{"name":"partial","hash":{},"data":data})) | |
| + "\n </li>\n </ul>\n </div>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <li>\n <a id=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\" class=\"listing " | |
| + alias4(((helper = (helper = helpers.classes || (depth0 != null ? depth0.classes : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"classes","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.label : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </li>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers.unless.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.restricted : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/items_grid", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<table>\n <thead>\n <tr>\n <th>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"title",{"name":"i18n","hash":{},"data":data})) | |
| + "</th>\n <th>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"authors",{"name":"i18n","hash":{},"data":data})) | |
| + "</th>\n <th>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"owner",{"name":"i18n","hash":{},"data":data})) | |
| + "</th>\n <th>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"transaction",{"name":"i18n","hash":{},"data":data})) | |
| + "</th>\n <th>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"added",{"name":"i18n","hash":{},"data":data})) | |
| + "</th>\n </tr>\n </thead>\n <tbody></tbody>\n</table>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/items_list", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <h3 class=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.header : depth0)) != null ? stack1.classes : stack1), depth0)) | |
| + "\">" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.header : depth0)) != null ? stack1.text : stack1),{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.header : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<div class=\"itemsList\"></div>\n<div class=\"more\">\n <span class=\"loading\"></span>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/no_item", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"cube","big grey",{"name":"icon","hash":{},"data":data})) | |
| + "\n<p class=\"grey\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"no item here",{"name":"i18n","hash":{},"data":data})) | |
| + "...</p>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/inventory/views/templates/remove_item", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a class=\"remove dark-grey\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"trash-o",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"delete",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/map/lib/build_marker", function(exports, require, module) { | |
| var ObjectMarker, customIcon, groupMarker, markers, userMarker; | |
| userMarker = require('../views/templates/user_marker'); | |
| groupMarker = require('../views/templates/group_marker'); | |
| customIcon = require('./custom_icon'); | |
| ObjectMarker = function(markerBuilder) { | |
| var objectMarker; | |
| return objectMarker = function(params) { | |
| var html, icon, lat, lng, marker, model, ref; | |
| model = params.model; | |
| ref = model.getCoords(), lat = ref.lat, lng = ref.lng; | |
| html = markerBuilder(model.serializeData()); | |
| icon = customIcon(html); | |
| marker = L.marker([lat, lng], { | |
| icon: icon | |
| }); | |
| return marker; | |
| }; | |
| }; | |
| markers = { | |
| user: ObjectMarker(userMarker), | |
| group: ObjectMarker(groupMarker), | |
| circle: function(params) { | |
| var latLng, metersRadius; | |
| latLng = params.latLng, metersRadius = params.metersRadius; | |
| if (metersRadius == null) { | |
| metersRadius = 200; | |
| } | |
| return L.circle(latLng, metersRadius); | |
| } | |
| }; | |
| module.exports = function(params) { | |
| var markerType; | |
| markerType = params.markerType; | |
| return markers[markerType](params); | |
| }; | |
| }); | |
| ;require.register("modules/map/lib/config", function(exports, require, module) { | |
| var accessToken; | |
| accessToken = "pk.eyJ1IjoibWF4bGF0aGEiLCJhIjoiY2lldm9xdjFrMDBkMnN6a3NmY211MzQxcyJ9.a7_CBy6Xao-yF6f1cjsBNA"; | |
| L.Icon.Default.imagePath = '/public/images/map'; | |
| module.exports = { | |
| tileUrl: "https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=" + accessToken, | |
| settings: { | |
| attribution: "Map data © <a href=\"http://openstreetmap.org\">OpenStreetMap</a> contributors,\n<a href=\"http://creativecommons.org/licenses/by-sa/2.0/\">CC-BY-SA</a>,\nImagery © <a href=\"http://mapbox.com\">Mapbox</a>", | |
| minZoom: 2, | |
| maxZoom: 18, | |
| id: 'maxlatha.gd5jof9d', | |
| accessToken: accessToken, | |
| noWrap: true | |
| }, | |
| defaultZoom: 13 | |
| }; | |
| }); | |
| ;require.register("modules/map/lib/custom_icon", function(exports, require, module) { | |
| module.exports = function(html, className) { | |
| if (className == null) { | |
| className = ''; | |
| } | |
| return L.divIcon({ | |
| className: "map-icon " + className, | |
| html: html | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/map/lib/draw", function(exports, require, module) { | |
| var AddMarkerToCluster, AddMarkerToMap, buildMarker, defaultZoom, error_, initWithCluster, initWithoutCluster, ref, settings, tileUrl, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| ref = require('./config'), tileUrl = ref.tileUrl, settings = ref.settings, defaultZoom = ref.defaultZoom; | |
| buildMarker = require('./build_marker'); | |
| error_ = require('lib/error'); | |
| module.exports = function(params) { | |
| var cluster, containerId, latLng, map, zoom; | |
| containerId = params.containerId, latLng = params.latLng, zoom = params.zoom, cluster = params.cluster; | |
| zoom || (zoom = defaultZoom); | |
| map = L.map(containerId).setView(latLng, zoom); | |
| L.tileLayer(tileUrl, settings).addTo(map); | |
| if (cluster) { | |
| initWithCluster(map); | |
| } else { | |
| initWithoutCluster(map); | |
| } | |
| return map; | |
| }; | |
| initWithCluster = function(map) { | |
| var cluster; | |
| cluster = L.markerClusterGroup(); | |
| cluster._objectIds = []; | |
| map.addLayer(cluster); | |
| map.addMarker = AddMarkerToCluster(cluster); | |
| }; | |
| initWithoutCluster = function(map) { | |
| map.addMarker = AddMarkerToMap(map); | |
| }; | |
| AddMarkerToMap = function(map) { | |
| var addMarkerToMap; | |
| return addMarkerToMap = function(params) { | |
| var marker; | |
| marker = buildMarker(params); | |
| marker.addTo(map); | |
| return marker; | |
| }; | |
| }; | |
| AddMarkerToCluster = function(cluster) { | |
| var addMarkerToCluster; | |
| return addMarkerToCluster = function(params) { | |
| var marker, objectId; | |
| objectId = params.objectId; | |
| if (indexOf.call(cluster._objectIds, objectId) >= 0) { | |
| _.log(objectId, 'not re-adding known object'); | |
| return; | |
| } | |
| marker = buildMarker(params); | |
| cluster.addLayer(marker); | |
| cluster._objectIds.push(objectId); | |
| _.log(objectId, 'added unknown object'); | |
| return marker; | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/map/lib/map", function(exports, require, module) { | |
| var defaultZoom, formatLeafletEvent, getCurrentPosition, map_, showGroupOnMap, showUserInventory, smartPreventDefault; | |
| defaultZoom = require('./config').defaultZoom; | |
| getCurrentPosition = require('./navigator_position'); | |
| smartPreventDefault = require('modules/general/lib/smart_prevent_default'); | |
| module.exports = map_ = { | |
| draw: require('./draw'), | |
| getCurrentPosition: getCurrentPosition, | |
| updateRoute: function(root, lat, lng, zoom) { | |
| var route; | |
| if (zoom == null) { | |
| zoom = defaultZoom; | |
| } | |
| route = _.buildPath(root, { | |
| lat: lat, | |
| lng: lng, | |
| zoom: zoom | |
| }); | |
| return app.navigate(route, { | |
| preventScrollTop: true | |
| }); | |
| }, | |
| updateRouteFromEvent: function(root, e) { | |
| var _zoom, lat, lng, ref; | |
| ref = e.target.getCenter(), lat = ref.lat, lng = ref.lng; | |
| _zoom = e.target._zoom; | |
| return map_.updateRoute(root, lat, lng, _zoom); | |
| }, | |
| updateMarker: function(marker, coords) { | |
| var lat, lng; | |
| lat = coords.lat, lng = coords.lng; | |
| return marker.setLatLng([lat, lng]); | |
| }, | |
| showUsersOnMap: function(map, users) { | |
| var i, len, ref, results, user; | |
| ref = _.forceArray(users); | |
| results = []; | |
| for (i = 0, len = ref.length; i < len; i++) { | |
| user = ref[i]; | |
| results.push(map_.showUserOnMap(map, user)); | |
| } | |
| return results; | |
| }, | |
| showGroupsOnMap: function(map, groups) { | |
| var group, i, len, ref, results; | |
| ref = _.forceArray(groups); | |
| results = []; | |
| for (i = 0, len = ref.length; i < len; i++) { | |
| group = ref[i]; | |
| results.push(showGroupOnMap(map, group)); | |
| } | |
| return results; | |
| }, | |
| BoundFilter: function(map) { | |
| var bounds, filter; | |
| bounds = map.getBounds(); | |
| return filter = function(model) { | |
| var point; | |
| if (!model.hasPosition()) { | |
| return false; | |
| } | |
| point = model.getLatLng(); | |
| return bounds.contains(point); | |
| }; | |
| }, | |
| distanceBetween: function(a, b) { | |
| _.types(arguments, 'arrays...'); | |
| a = new L.LatLng(a[0], a[1]); | |
| b = new L.LatLng(b[0], b[1]); | |
| return a.distanceTo(b) / 1000; | |
| }, | |
| getBbox: function(map) { | |
| var _northEast, _southWest, ref; | |
| ref = map.getBounds(), _southWest = ref._southWest, _northEast = ref._northEast; | |
| return [_southWest.lng, _southWest.lat, _northEast.lng, _northEast.lat]; | |
| }, | |
| showUserOnMap: function(map, user) { | |
| var marker; | |
| if (user.hasPosition()) { | |
| marker = map.addMarker({ | |
| objectId: user.cid, | |
| model: user, | |
| markerType: 'user' | |
| }); | |
| if (marker != null) { | |
| return marker.on('click', showUserInventory.bind(null, user)); | |
| } | |
| } | |
| } | |
| }; | |
| showGroupOnMap = function(map, group) { | |
| if (group.hasPosition()) { | |
| return map.addMarker({ | |
| objectId: group.cid, | |
| model: group, | |
| markerType: 'group' | |
| }); | |
| } | |
| }; | |
| showUserInventory = function(user, e) { | |
| e = formatLeafletEvent(e); | |
| smartPreventDefault(e); | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:inventory:user', user); | |
| } | |
| }; | |
| formatLeafletEvent = function(e) { | |
| e.which = e.originalEvent.which; | |
| e.preventDefault = e.originalEvent.preventDefault.bind(e.originalEvent); | |
| return e; | |
| }; | |
| }); | |
| ;require.register("modules/map/lib/navigator_position", function(exports, require, module) { | |
| var PositionError, currentPosition, errIcon, normalizeCoords; | |
| errIcon = _.icon('bolt'); | |
| currentPosition = function() { | |
| return new Promise(function(resolve, reject) { | |
| var err, formattedReject, ref; | |
| if (((ref = navigator.geolocation) != null ? ref.getCurrentPosition : void 0) == null) { | |
| err = new Error('getCurrentPosition isnt accessible'); | |
| return reject(err); | |
| } | |
| formattedReject = function(err) { | |
| _.error(err, 'currentPosition err'); | |
| return reject(new Error(err.message || 'getCurrentPosition error')); | |
| }; | |
| return navigator.geolocation.getCurrentPosition(resolve, formattedReject, { | |
| timeout: 20 * 1000 | |
| }); | |
| }); | |
| }; | |
| normalizeCoords = function(position) { | |
| var latitude, longitude, ref; | |
| ref = position.coords, latitude = ref.latitude, longitude = ref.longitude; | |
| return { | |
| lat: latitude, | |
| lng: longitude | |
| }; | |
| }; | |
| PositionError = function(containerId) { | |
| var catcher; | |
| return catcher = function(err) { | |
| $("#" + containerId).addClass('position-error').html(errIcon + _.i18n("couldn't obtain your position")); | |
| throw err; | |
| }; | |
| }; | |
| module.exports = function(containerId) { | |
| return currentPosition().then(normalizeCoords).then(_.Log('current position'))["catch"](PositionError(containerId)); | |
| }; | |
| }); | |
| ;require.register("modules/map/map", function(exports, require, module) { | |
| var PositionPicker, map_, promptGroupPositionPicker, showGroupPositionPicker, showMainUserPositionPicker, showPositionPicker, updatePosition; | |
| PositionPicker = require('./views/position_picker'); | |
| map_ = require('./lib/map'); | |
| module.exports = function() { | |
| app.commands.setHandlers({ | |
| 'show:position:picker:main:user': showMainUserPositionPicker, | |
| 'show:position:picker:group': showGroupPositionPicker | |
| }); | |
| return app.reqres.setHandlers({ | |
| 'prompt:group:position:picker': promptGroupPositionPicker | |
| }); | |
| }; | |
| showPositionPicker = function(options) { | |
| return app.layout.modal.show(new PositionPicker(options)); | |
| }; | |
| updatePosition = function(model, updateReqres, type) { | |
| return showPositionPicker({ | |
| model: model, | |
| type: type, | |
| resolve: function(newCoords, selector) { | |
| return app.request(updateReqres, { | |
| attribute: 'position', | |
| value: newCoords, | |
| selector: selector, | |
| model: model | |
| }); | |
| } | |
| }); | |
| }; | |
| showMainUserPositionPicker = function() { | |
| return updatePosition(app.user, 'user:update', 'user'); | |
| }; | |
| showGroupPositionPicker = function(group) { | |
| return updatePosition(group, 'group:update:settings', 'group'); | |
| }; | |
| promptGroupPositionPicker = function() { | |
| return new Promise(function(resolve, reject) { | |
| var err, error; | |
| try { | |
| return showPositionPicker({ | |
| resolve: resolve, | |
| type: 'group' | |
| }); | |
| } catch (error) { | |
| err = error; | |
| return reject(err); | |
| } | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/map/views/position_picker", function(exports, require, module) { | |
| var Check, containerId, error_, forms_, map_, ref, startLoading, stopLoading, typeStrings, updateMarker; | |
| map_ = require('../lib/map'); | |
| forms_ = require('modules/general/lib/forms'); | |
| error_ = require('lib/error'); | |
| ref = require('modules/general/plugins/behaviors'), startLoading = ref.startLoading, stopLoading = ref.stopLoading, Check = ref.Check; | |
| containerId = 'positionPickerMap'; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/position_picker'), | |
| className: 'positionPicker', | |
| behaviors: { | |
| AlertBox: {}, | |
| Loading: {}, | |
| SuccessCheck: {}, | |
| General: {} | |
| }, | |
| events: { | |
| 'click #validatePosition': 'validatePosition', | |
| 'click #removePosition': 'removePosition' | |
| }, | |
| initialize: function() { | |
| var model; | |
| model = this.options.model; | |
| if (model != null) { | |
| this.hasPosition = model.hasPosition(); | |
| return this.position = model.getCoords(); | |
| } else { | |
| this.hasPosition = false; | |
| return this.position = null; | |
| } | |
| }, | |
| serializeData: function() { | |
| return _.extend({}, typeStrings[this.options.type], { | |
| hasPosition: this.hasPosition, | |
| position: this.position | |
| }); | |
| }, | |
| onShow: function() { | |
| app.execute('modal:open', 'large'); | |
| return setTimeout(this.initMap.bind(this), 500); | |
| }, | |
| initMap: function() { | |
| if (this.hasPosition) { | |
| return this._initMap(this.position); | |
| } else { | |
| return map_.getCurrentPosition(containerId).then(this._initMap.bind(this)); | |
| } | |
| }, | |
| _initMap: function(coords) { | |
| var lat, lng, map, zoom; | |
| lat = coords.lat, lng = coords.lng, zoom = coords.zoom; | |
| map = map_.draw({ | |
| containerId: containerId, | |
| latLng: [lat, lng], | |
| zoom: zoom, | |
| cluster: false | |
| }); | |
| this.marker = map.addMarker({ | |
| markerType: 'circle', | |
| metersRadius: this.getMarkerMetersRadius(), | |
| latLng: [lat, lng] | |
| }); | |
| return map.on('move', updateMarker.bind(null, this.marker)); | |
| }, | |
| getCoords: function() { | |
| var lat, lng, ref1; | |
| ref1 = this.marker._latlng, lat = ref1.lat, lng = ref1.lng; | |
| return [lat, lng]; | |
| }, | |
| validatePosition: function() { | |
| return this._updatePosition(this.getCoords(), '#validatePosition'); | |
| }, | |
| removePosition: function() { | |
| return this._updatePosition(null, '#removePosition'); | |
| }, | |
| _updatePosition: function(newCoords, selector) { | |
| startLoading.call(this, selector); | |
| this.position = newCoords; | |
| return _.preq.start.then(this.options.resolve.bind(null, newCoords, selector)).then(stopLoading.bind(this)).then(Check.call(this, '_updatePosition', this.close.bind(this)))["catch"](error_.Complete('.alertBox'))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| close: function() { | |
| return app.execute('modal:close'); | |
| }, | |
| getMarkerMetersRadius: function() { | |
| switch (this.options.type) { | |
| case 'group': | |
| return 20; | |
| case 'user': | |
| return 200; | |
| } | |
| } | |
| }); | |
| typeStrings = { | |
| user: { | |
| title: 'select your position', | |
| context: 'position_privacy_context', | |
| tip: 'position_privacy_tip' | |
| }, | |
| group: { | |
| title: "select the group's position", | |
| context: 'group_position_context' | |
| } | |
| }; | |
| updateMarker = function(marker, e) { | |
| return map_.updateMarker(marker, e.target.getCenter()); | |
| }; | |
| }); | |
| ;require.register("modules/map/views/position_welcome", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'position-welcome', | |
| template: require('./templates/map_welcome'), | |
| events: { | |
| 'click #showPositionPicker': function() { | |
| return app.execute('show:position:picker:main:user'); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/map/views/templates/group_marker", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div class=\"groupIcon objectIcon\">\n <a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" title=\"" | |
| + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + " - " | |
| + alias4((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"group",{"name":"I18n","hash":{},"data":data})) | |
| + "\">\n <img src=\"" | |
| + alias4((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.picture : depth0),96,{"name":"src","hash":{},"data":data})) | |
| + "\">\n <p class=\"name label\">" | |
| + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + "</p>\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"group",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/map/views/templates/map_welcome", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"map-welcome\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"map-marker",{"name":"icon","hash":{},"data":data})) | |
| + "\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"you can now find books people nearby have to give, share or sell!",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n</div>\n<section id=\"position-picker\" class=\"centered\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"map:position_picker_button",{"name":"partial","hash":{},"data":data})) | |
| + "\n</section>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/map/views/templates/position_picker", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <p class=\"tip\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"info-circle",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.tip : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " <a id=\"removePosition\" class=\"button bold radius warning\">\n " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"delete position",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.title : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<p class=\"context\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.context : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n<div id=\"positionPickerMap\" class=\"map-container\"></div>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.tip : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<div class=\"bottom\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.position : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <a id=\"validatePosition\" class=\"button bold radius success\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"save position",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n</div>\n<span class='check alertBox'></span>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/map/views/templates/position_picker_button", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a id=\"showPositionPicker\" class=\"button bold radius\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"map-marker",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit your position",{"name":"i18n","hash":{},"data":data})) | |
| + "\n</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/map/views/templates/user_marker", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div class=\"userIcon objectIcon\">\n <a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" title=\"" | |
| + alias4(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + " - " | |
| + alias4((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"user",{"name":"I18n","hash":{},"data":data})) | |
| + "\">\n <img src=\"" | |
| + alias4((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.picture : depth0),60,{"name":"src","hash":{},"data":data})) | |
| + "\">\n <p class=\"username label\">" | |
| + alias4(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + "</p>\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/collections/groups", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| model: require('../models/group'), | |
| otherUsersRequestsCount: function() { | |
| return this.map(function(group) { | |
| return group.requestsCount(); | |
| }).sum(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/lib/aggregate_users_ids", function(exports, require, module) { | |
| var aggregates; | |
| module.exports = function() { | |
| var Name, all, cache, categories, getUserIds, name, recalculateAll; | |
| cache = {}; | |
| all = function(name, categories) { | |
| categories || (categories = name); | |
| return cache[name] || recalculateAll(name, categories); | |
| }; | |
| getUserIds = this.getUserIds.bind(this); | |
| recalculateAll = function(name, categories) { | |
| var ids; | |
| categories = _.forceArray(categories); | |
| ids = _.chain(categories).map(getUserIds).flatten().value(); | |
| return cache[name] = ids; | |
| }; | |
| for (name in aggregates) { | |
| categories = aggregates[name]; | |
| Name = _.capitaliseFirstLetter(name); | |
| this["all" + Name + "Ids"] = all.bind(this, name, categories); | |
| } | |
| return this.recalculateAllLists = function() { | |
| var results; | |
| results = []; | |
| for (name in aggregates) { | |
| categories = aggregates[name]; | |
| results.push(recalculateAll(name, categories)); | |
| } | |
| return results; | |
| }; | |
| }; | |
| aggregates = { | |
| admins: 'admins', | |
| membersStrict: 'members', | |
| members: ['admins', 'members'], | |
| invited: 'invited', | |
| requested: 'requested' | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/group_actions", function(exports, require, module) { | |
| var error_, triggerUserChange; | |
| error_ = require('lib/error'); | |
| module.exports = { | |
| inviteUser: function(user) { | |
| return this.action('invite', user.id).then(this.updateInvited.bind(this, user)); | |
| }, | |
| updateInvited: function(user) { | |
| this.push('invited', { | |
| user: user.id, | |
| invitor: app.user.id, | |
| timestamp: _.now() | |
| }); | |
| this.triggeredListChange(); | |
| return triggerUserChange(user); | |
| }, | |
| acceptInvitation: function() { | |
| this.moveMembership(app.user, 'invited', 'members'); | |
| return this.action('accept').then(this.fetchGroupUsersMissingItems.bind(this))["catch"](this.revertMove.bind(this, app.user, 'invited', 'members')); | |
| }, | |
| declineInvitation: function() { | |
| this.moveMembership(app.user, 'invited', 'declined'); | |
| return this.action('decline')["catch"](this.revertMove.bind(this, app.user, 'invited', 'declined')); | |
| }, | |
| requestToJoin: function() { | |
| this.createRequest(); | |
| return this.action('request')["catch"](this.revertMove.bind(this, app.user, null, 'requested')); | |
| }, | |
| createRequest: function() { | |
| return this.push('requested', { | |
| user: app.user.id, | |
| timestamp: _.now() | |
| }); | |
| }, | |
| cancelRequest: function() { | |
| this.moveMembership(app.user, 'requested', 'tmp'); | |
| return this.action('cancel-request')["catch"](this.revertMove.bind(this, app.user, 'requested', 'tmp')); | |
| }, | |
| acceptRequest: function(user) { | |
| this.moveMembership(user, 'requested', 'members'); | |
| return this.action('accept-request', user.id)["catch"](this.revertMove.bind(this, user, 'requested', 'members')); | |
| }, | |
| refuseRequest: function(user) { | |
| this.moveMembership(user, 'requested', 'tmp'); | |
| return this.action('refuse-request', user.id)["catch"](this.revertMove.bind(this, user, 'requested', 'tmp')); | |
| }, | |
| makeAdmin: function(user) { | |
| this.moveMembership(user, 'members', 'admins'); | |
| triggerUserChange(user); | |
| return this.action('make-admin', user.id)["catch"](this.revertMove.bind(this, user, 'members', 'admins')); | |
| }, | |
| kick: function(user) { | |
| this.moveMembership(user, 'members', 'tmp'); | |
| return this.action('kick', user.id)["catch"](this.revertMove.bind(this, user, 'members', 'tmp')); | |
| }, | |
| leave: function() { | |
| var initialCategory; | |
| initialCategory = this.mainUserIsAdmin() ? 'admins' : 'members'; | |
| this.moveMembership(app.user, initialCategory, 'tmp'); | |
| return this.action('leave')["catch"](this.revertMove.bind(this, app.user, initialCategory, 'tmp')); | |
| }, | |
| action: function(action, userId) { | |
| return _.preq.put(app.API.groups["private"], { | |
| action: action, | |
| group: this.id, | |
| user: userId | |
| }).then(_.Tap(this._postActionHooks.bind(this, action))); | |
| }, | |
| _postActionHooks: function(action) { | |
| app.execute('track:group', action); | |
| return this.trigger("action:" + action); | |
| }, | |
| revertMove: function(user, previousCategory, newCategory, err) { | |
| this.moveMembership(user, newCategory, previousCategory); | |
| triggerUserChange(user); | |
| throw err; | |
| }, | |
| moveMembership: function(user, previousCategory, newCategory) { | |
| var membership; | |
| membership = this.findMembership(previousCategory, user); | |
| if (membership == null) { | |
| throw error_["new"]('membership not found', arguments); | |
| } | |
| this.without(previousCategory, membership); | |
| if (newCategory != null) { | |
| this.push(newCategory, membership); | |
| } | |
| if (app.request('user:isMainUser', user.id)) { | |
| app.vent.trigger('group:main:user:move'); | |
| } | |
| return this.triggeredListChange(); | |
| }, | |
| triggeredListChange: function() { | |
| this.trigger('list:change'); | |
| return this.trigger('list:change:after'); | |
| } | |
| }; | |
| triggerUserChange = function(user) { | |
| var trigger; | |
| trigger = function() { | |
| return user.trigger('group:user:change'); | |
| }; | |
| return setTimeout(trigger, 100); | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/group_form_data", function(exports, require, module) { | |
| module.exports = { | |
| description: function(description) { | |
| return { | |
| id: 'description', | |
| placeholder: 'help other users to understand what this group is about', | |
| value: description | |
| }; | |
| }, | |
| searchability: function(active) { | |
| if (active == null) { | |
| active = true; | |
| } | |
| return { | |
| id: 'searchabilityToggler', | |
| checked: active, | |
| label: 'appear in search results' | |
| }; | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/group_helpers", function(exports, require, module) { | |
| var Groups, Updater, filters, initGroupFilteredCollection; | |
| Groups = require('modules/network/collections/groups'); | |
| Updater = require('lib/model_update').Updater; | |
| module.exports = function() { | |
| var fetchLastGroupsCreated, getGroupModel, getGroupPublicData, getGroupsInCommon, groupSettingsUpdater, groups, lastGroupFetched, otherVisitedGroups, ref; | |
| groups = ((ref = app.user) != null ? ref.groups : void 0) || new Groups; | |
| getGroupModel = function(id) { | |
| var group; | |
| group = groups.byId(id); | |
| if (group != null) { | |
| return _.preq.resolve(group); | |
| } else { | |
| return getGroupPublicData(id); | |
| } | |
| }; | |
| getGroupPublicData = function(id) { | |
| return _.preq.get(_.buildPath(app.API.groups["public"], { | |
| id: id | |
| })).then(function(res) { | |
| var group, groupModel, items, users; | |
| group = res.group, users = res.users, items = res.items; | |
| app.execute('users:public:add', users); | |
| Items["public"].add(items); | |
| groupModel = groups.add(group); | |
| groupModel.publicDataOnly = true; | |
| return groupModel; | |
| }); | |
| }; | |
| groupSettingsUpdater = Updater({ | |
| endpoint: app.API.groups["private"], | |
| action: 'update-settings', | |
| modelIdLabel: 'group' | |
| }); | |
| getGroupsInCommon = function(user) { | |
| return groups.filter(function(group) { | |
| return group.mainUserIsMember() && group.userStatus(user) === 'member'; | |
| }); | |
| }; | |
| otherVisitedGroups = function(user) { | |
| return groups.filter(function(group) { | |
| var mainUserIsntMember; | |
| mainUserIsntMember = !group.mainUserIsMember(); | |
| return mainUserIsntMember && group.userStatus(user) === 'member'; | |
| }); | |
| }; | |
| app.reqres.setHandlers({ | |
| 'get:group:model': getGroupModel, | |
| 'get:group:model:sync': groups.byId.bind(groups), | |
| 'group:update:settings': groupSettingsUpdater, | |
| 'get:groups:common': getGroupsInCommon, | |
| 'get:groups:others:visited': otherVisitedGroups | |
| }); | |
| initGroupFilteredCollection(groups, 'mainUserMember'); | |
| initGroupFilteredCollection(groups, 'mainUserInvited'); | |
| groups.filtered = require('./groups_search')(groups); | |
| lastGroupFetched = false; | |
| fetchLastGroupsCreated = function() { | |
| if (!lastGroupFetched) { | |
| lastGroupFetched = true; | |
| return _.preq.get(app.API.groups.last).then(groups.add.bind(groups))["catch"](_.ErrorRethrow('fetchLastGroupsCreated')); | |
| } | |
| }; | |
| return app.commands.setHandlers({ | |
| 'fetch:last:group:created': fetchLastGroupsCreated | |
| }); | |
| }; | |
| initGroupFilteredCollection = function(groups, name) { | |
| var filtered; | |
| filtered = groups[name] = new FilteredCollection(groups); | |
| filtered.filterBy(name, filters[name]); | |
| return filtered.listenTo(app.vent, 'group:main:user:move', filtered.refilter.bind(filtered)); | |
| }; | |
| filters = { | |
| mainUserMember: function(group) { | |
| return group.mainUserIsMember(); | |
| }, | |
| mainUserInvited: function(group) { | |
| return group.mainUserIsInvited(); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/groups", function(exports, require, module) { | |
| var forms_, groupDescriptionTests, groupNameTests; | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = { | |
| createGroup: function(data) { | |
| var coords, description, groups, name, searchable; | |
| name = data.name, description = data.description, searchable = data.searchable, coords = data.coords; | |
| groups = app.user.groups; | |
| return _.preq.post(app.API.groups["private"], { | |
| action: 'create', | |
| name: name, | |
| description: description, | |
| searchable: searchable | |
| }).then(groups.add.bind(groups)).then(_.Tap(app.execute.bind(app, 'track:group', 'create'))).then(_.Log('group'))["catch"](_.Error('group create')); | |
| }, | |
| validateName: function(name, selector) { | |
| forms_.pass({ | |
| value: name, | |
| tests: groupNameTests, | |
| selector: selector | |
| }); | |
| }, | |
| validateDescription: function(description, selector) { | |
| forms_.pass({ | |
| value: description, | |
| tests: groupDescriptionTests, | |
| selector: selector | |
| }); | |
| } | |
| }; | |
| groupNameTests = { | |
| "group name can't be longer than 60 characters": function(name) { | |
| return name.length > 60; | |
| } | |
| }; | |
| groupDescriptionTests = { | |
| "group description can't be longer than 5000 characters": function(description) { | |
| return description.length > 5000; | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/groups_search", function(exports, require, module) { | |
| var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = function(groups) { | |
| var addGroupUnlessHere, addGroupsAndFilterByText, addGroupsUnlessHere, filtered, queried, queryIfNeeded, searchByPosition, searchByText; | |
| filtered = new FilteredCollection(groups); | |
| queried = []; | |
| searchByText = function(text) { | |
| return queryIfNeeded(text).then(addGroupsAndFilterByText.bind(null, text))["catch"](function(err) { | |
| queried = _.without(queried, text); | |
| throw err; | |
| }); | |
| }; | |
| queryIfNeeded = function(text) { | |
| var noQueryNeeded; | |
| noQueryNeeded = indexOf.call(queried, text) >= 0 || text === ''; | |
| if (noQueryNeeded) { | |
| return Promise.resolve(false); | |
| } else { | |
| queried.push(text); | |
| return _.preq.get(app.API.groups.search(text)); | |
| } | |
| }; | |
| addGroupsAndFilterByText = function(text, groupsData) { | |
| if (groupsData) { | |
| groups.add(groupsData); | |
| } | |
| return filtered.filterByText(text); | |
| }; | |
| searchByPosition = function(bbox) { | |
| return _.preq.get(app.API.groups.searchByPosition(bbox)).then(_.Log('groups by position')).then(addGroupsUnlessHere); | |
| }; | |
| addGroupsUnlessHere = function(groups) { | |
| return app.request('waitForData').then(function() { | |
| var group, i, len; | |
| for (i = 0, len = groups.length; i < len; i++) { | |
| group = groups[i]; | |
| addGroupUnlessHere(group); | |
| } | |
| }); | |
| }; | |
| addGroupUnlessHere = function(group) { | |
| var _id; | |
| _id = group._id; | |
| if (app.user.groups.byId(_id) == null) { | |
| return app.user.groups.add(group); | |
| } | |
| }; | |
| filtered.searchByText = _.debounce(searchByText, 200); | |
| filtered.searchByPosition = searchByPosition; | |
| return filtered; | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/nearby_layouts", function(exports, require, module) { | |
| var BoundFilter, containerId, drawMap, initEventListners, initMap, map_, solvePosition, updateRoute, updateRouteFromEvent; | |
| map_ = require('modules/map/lib/map'); | |
| updateRoute = map_.updateRoute, updateRouteFromEvent = map_.updateRouteFromEvent, BoundFilter = map_.BoundFilter; | |
| containerId = 'map'; | |
| initMap = function(params) { | |
| var query; | |
| query = params.query; | |
| return solvePosition(query).then(drawMap.bind(null, params)).then(initEventListners.bind(null, params)); | |
| }; | |
| solvePosition = function(coords) { | |
| var lat, lng, user, zoom; | |
| lat = coords.lat, lng = coords.lng, zoom = coords.zoom; | |
| if ((lat != null) && (lng != null)) { | |
| return _.preq.resolve(coords); | |
| } | |
| user = app.user; | |
| if (user.hasPosition()) { | |
| return _.preq.resolve(user.getCoords()); | |
| } | |
| return map_.getCurrentPosition(containerId); | |
| }; | |
| drawMap = function(params, coords) { | |
| var fn, lat, lng, map, path, showObjects, zoom; | |
| lat = coords.lat, lng = coords.lng, zoom = coords.zoom; | |
| showObjects = params.showObjects, path = params.path; | |
| map = map_.draw({ | |
| containerId: containerId, | |
| latLng: [lat, lng], | |
| zoom: zoom, | |
| cluster: true | |
| }); | |
| showObjects(map); | |
| fn = updateRoute.bind(null, path, lat, lng, zoom); | |
| setTimeout(fn, 500); | |
| _.type(map, 'object'); | |
| return map; | |
| }; | |
| initEventListners = function(params, map) { | |
| var onMoveend, path; | |
| _.type(map, 'object'); | |
| path = params.path, onMoveend = params.onMoveend; | |
| map.on('moveend', updateRouteFromEvent.bind(null, path)); | |
| map.on('moveend', onMoveend); | |
| return map; | |
| }; | |
| module.exports = { | |
| initMap: initMap, | |
| regions: { | |
| list: '#list' | |
| }, | |
| grabMap: function(map) { | |
| _.type(map, 'object'); | |
| return this.map = map; | |
| }, | |
| refreshListFilter: function() { | |
| return this.collection.filterBy('geobox', BoundFilter(this.map)); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/network_tabs", function(exports, require, module) { | |
| var addPath, groupsTabs, groupsTabsDefault, resolveCurrentTab, usersTabs, usersTabsDefault; | |
| usersTabsDefault = 'searchUsers'; | |
| groupsTabsDefault = 'searchGroups'; | |
| usersTabs = { | |
| searchUsers: { | |
| name: 'searchUsers', | |
| section: 'search', | |
| title: 'search', | |
| icon: 'search', | |
| layout: 'users_search_layout' | |
| }, | |
| friends: { | |
| name: 'friends', | |
| section: 'friends', | |
| title: 'friends', | |
| icon: 'list', | |
| layout: 'friends_layout', | |
| counter: 'friendsRequestsCount' | |
| }, | |
| invite: { | |
| name: 'invite', | |
| section: 'invite', | |
| title: 'invite', | |
| icon: 'envelope', | |
| layout: 'invite_friends' | |
| }, | |
| nearbyUsers: { | |
| name: 'nearbyUsers', | |
| section: 'nearby', | |
| title: 'nearby', | |
| icon: 'map-marker', | |
| layout: 'nearby_users_layout' | |
| } | |
| }; | |
| groupsTabs = { | |
| searchGroups: { | |
| name: 'searchGroups', | |
| section: 'search', | |
| title: 'search', | |
| icon: 'search', | |
| layout: 'groups_search_layout' | |
| }, | |
| userGroups: { | |
| name: 'userGroups', | |
| section: 'user', | |
| title: 'your groups', | |
| icon: 'list', | |
| layout: 'groups_layout', | |
| counter: 'groupsRequestsCount' | |
| }, | |
| createGroup: { | |
| name: 'createGroup', | |
| section: 'create', | |
| title: 'create', | |
| icon: 'plus', | |
| layout: 'create_group_layout' | |
| }, | |
| nearbyGroups: { | |
| name: 'nearbyGroups', | |
| section: 'nearby', | |
| title: 'nearby', | |
| icon: 'map-marker', | |
| layout: 'nearby_groups_layout' | |
| } | |
| }; | |
| addPath = function(category, categoryData) { | |
| var key, obj, results, section; | |
| results = []; | |
| for (key in categoryData) { | |
| obj = categoryData[key]; | |
| section = obj.section; | |
| obj.parent = category; | |
| results.push(obj.path = "network/" + category + "/" + section); | |
| } | |
| return results; | |
| }; | |
| addPath('users', usersTabs); | |
| addPath('groups', groupsTabs); | |
| resolveCurrentTab = function(tab) { | |
| switch (tab) { | |
| case 'users': | |
| return usersTabsDefault; | |
| case 'groups': | |
| return groupsTabsDefault; | |
| default: | |
| return tab; | |
| } | |
| }; | |
| module.exports = { | |
| tabsData: { | |
| all: _.extend({}, usersTabs, groupsTabs), | |
| users: usersTabs, | |
| groups: groupsTabs | |
| }, | |
| usersTabs: usersTabs, | |
| groupsTabs: groupsTabs, | |
| resolveCurrentTab: resolveCurrentTab, | |
| getNameFromId: function(id) { | |
| return id.replace('Tab', ''); | |
| }, | |
| defaultTab: usersTabsDefault | |
| }; | |
| }); | |
| ;require.register("modules/network/lib/update_query_route", function(exports, require, module) { | |
| var allTabs, updateRoute; | |
| allTabs = require('../lib/network_tabs').tabsData.all; | |
| updateRoute = function(path, query) { | |
| return app.navigate(_.buildPath(path, { | |
| q: query | |
| })); | |
| }; | |
| module.exports = function(key) { | |
| var path; | |
| path = allTabs[key].path; | |
| return _.debounce(updateRoute.bind(null, path), 300); | |
| }; | |
| }); | |
| ;require.register("modules/network/models/group", function(exports, require, module) { | |
| var Positionable, aggregateUsersIds, defaultCover, error_, escapeExpression, groupActions, userItemsCount, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| error_ = require('lib/error'); | |
| aggregateUsersIds = require('../lib/aggregate_users_ids'); | |
| groupActions = require('../lib/group_actions'); | |
| defaultCover = require('lib/urls').images.brittanystevens; | |
| escapeExpression = Handlebars.escapeExpression; | |
| Positionable = require('modules/general/models/positionable'); | |
| module.exports = Positionable.extend({ | |
| url: app.API.groups["private"], | |
| initialize: function() { | |
| var _id, canonical, name, pathname, ref, uriEscapedGroupName; | |
| aggregateUsersIds.call(this); | |
| _.extend(this, groupActions); | |
| ref = this.toJSON(), _id = ref._id, name = ref.name; | |
| uriEscapedGroupName = this.getUriEscapedName(); | |
| canonical = "/groups/" + _id; | |
| pathname = canonical + "/" + uriEscapedGroupName; | |
| this.set({ | |
| canonical: canonical, | |
| pathname: pathname, | |
| boardPathname: "/network" + pathname, | |
| tmp: [] | |
| }); | |
| this.initMembersCollection(); | |
| this.initRequestersCollection(); | |
| this.on('list:change', this.recalculateAllLists.bind(this)); | |
| this.on('list:change:after', this.initMembersCollection.bind(this)); | |
| return this.on('list:change:after', this.initRequestersCollection.bind(this)); | |
| }, | |
| initMembersCollection: function() { | |
| return this.initUsersCollection('members'); | |
| }, | |
| initRequestersCollection: function() { | |
| return this.initUsersCollection('requested'); | |
| }, | |
| initUsersCollection: function(name) { | |
| var Name, i, ids, len, results, userId; | |
| this[name] || (this[name] = new Backbone.Collection); | |
| this[name].remove(this[name].models); | |
| Name = _.capitaliseFirstLetter(name); | |
| ids = this["all" + Name + "Ids"](); | |
| results = []; | |
| for (i = 0, len = ids.length; i < len; i++) { | |
| userId = ids[i]; | |
| results.push(this.fetchUser(this[name], userId)); | |
| } | |
| return results; | |
| }, | |
| fetchUser: function(collection, userId) { | |
| return app.request('get:group:user:model', userId).then(collection.add.bind(collection))["catch"](_.Error('fetchMembers')); | |
| }, | |
| getUserIds: function(category) { | |
| return this.get(category).map(_.property('user')); | |
| }, | |
| membersCount: function() { | |
| return this.allMembersIds().length; | |
| }, | |
| requestsCount: function() { | |
| if (this.mainUserIsAdmin()) { | |
| return this.requested.length; | |
| } else { | |
| return 0; | |
| } | |
| }, | |
| itemsCount: function() { | |
| return this.members.map(userItemsCount).sum(); | |
| }, | |
| serializeData: function() { | |
| var attrs, status; | |
| attrs = this.toJSON(); | |
| status = this.mainUserStatus(); | |
| attrs.picture || (attrs.picture = defaultCover); | |
| attrs["status_" + status] = true; | |
| if (attrs.position != null) { | |
| attrs.position = { | |
| lat: attrs.position[0], | |
| lng: attrs.position[1] | |
| }; | |
| } | |
| return _.extend(attrs, { | |
| publicDataOnly: this.publicDataOnly, | |
| membersCount: this.membersCount(), | |
| itemsCount: !this.publicDataOnly ? this.itemsCount() : void 0, | |
| mainUserIsAdmin: this.mainUserIsAdmin(), | |
| mainUserIsMember: this.mainUserIsMember(), | |
| hasPosition: this.hasPosition() | |
| }); | |
| }, | |
| userStatus: function(user) { | |
| var id; | |
| id = user.id; | |
| if (indexOf.call(this.allMembersIds(), id) >= 0) { | |
| return 'member'; | |
| } else if (indexOf.call(this.allInvitedIds(), id) >= 0) { | |
| return 'invited'; | |
| } else if (indexOf.call(this.allRequestedIds(), id) >= 0) { | |
| return 'requested'; | |
| } else { | |
| return 'none'; | |
| } | |
| }, | |
| userIsAdmin: function(userId) { | |
| return indexOf.call(this.allAdminsIds(), userId) >= 0; | |
| }, | |
| mainUserStatus: function() { | |
| return this.userStatus(app.user); | |
| }, | |
| mainUserIsAdmin: function() { | |
| var ref; | |
| return ref = app.user.id, indexOf.call(this.allAdminsIds(), ref) >= 0; | |
| }, | |
| mainUserIsMember: function() { | |
| var ref; | |
| return ref = app.user.id, indexOf.call(this.allMembersIds(), ref) >= 0; | |
| }, | |
| mainUserIsInvited: function() { | |
| var ref; | |
| return ref = app.user.id, indexOf.call(this.allInvitedIds(), ref) >= 0; | |
| }, | |
| findMembership: function(category, user) { | |
| return _.findWhere(this.get(category), { | |
| user: user.id | |
| }); | |
| }, | |
| findInvitation: function(user) { | |
| return this.findMembership('invited', user); | |
| }, | |
| findUserInvitor: function(user) { | |
| var invitation; | |
| invitation = this.findInvitation(user); | |
| if (invitation != null) { | |
| return app.request('get:userModel:from:userId', invitation.invitor); | |
| } | |
| }, | |
| findMainUserInvitor: function() { | |
| return this.findUserInvitor(app.user); | |
| }, | |
| fetchGroupUsersMissingItems: function() { | |
| var groupNonFriendsUsersIds; | |
| groupNonFriendsUsersIds = app.request('get:non:friends:ids', this.allMembersIds()); | |
| _.log(groupNonFriendsUsersIds, 'groupNonFriendsUsersIds'); | |
| if (groupNonFriendsUsersIds.length > 0) { | |
| return _.preq.get(app.API.users.items(groupNonFriendsUsersIds)).then(_.Log('groupNonFriendsUsers items')).then(Items.add.bind(Items))["catch"](_.Error('fetchGroupUsersMissingItems err')); | |
| } | |
| }, | |
| getEscapedName: function() { | |
| return escapeExpression(this.get('name')); | |
| }, | |
| getUriEscapedName: function() { | |
| return encodeURIComponent(this.get('name')); | |
| }, | |
| userCanLeave: function() { | |
| var mainUserIsTheOnlyAdmin, thereAreOtherMembers; | |
| if (!this.mainUserIsAdmin()) { | |
| return true; | |
| } | |
| mainUserIsTheOnlyAdmin = this.allAdminsIds().length === 1; | |
| thereAreOtherMembers = this.allMembersStrictIds().length > 0; | |
| if (mainUserIsTheOnlyAdmin && thereAreOtherMembers) { | |
| return false; | |
| } else { | |
| return true; | |
| } | |
| }, | |
| userIsLastUser: function() { | |
| return this.allMembersIds().length === 1; | |
| }, | |
| updateMetadata: function() { | |
| return app.execute('metadata:update', { | |
| title: this.get('name'), | |
| description: this.getDescription(), | |
| image: this.getCover(), | |
| url: this.get('canonical') | |
| }); | |
| }, | |
| getDescription: function() { | |
| var desc; | |
| desc = this.get('description'); | |
| if (_.isNonEmptyString(desc)) { | |
| return desc; | |
| } else { | |
| return _.i18n('group_default_description', { | |
| groupName: this.get('name') | |
| }); | |
| } | |
| }, | |
| getCover: function() { | |
| return this.get('picture') || defaultCover; | |
| }, | |
| asMatchable: function() { | |
| return [this.get('name'), this.get('description')]; | |
| } | |
| }); | |
| userItemsCount = function(user) { | |
| var nonPrivate; | |
| nonPrivate = true; | |
| return user.inventoryLength(nonPrivate) || 0; | |
| }; | |
| }); | |
| ;require.register("modules/network/network", function(exports, require, module) { | |
| var API, GroupBoard, NetworkLayout, counterUnlessZero, defaultTab, initGroupHelpers, initRequestsCollectionsEvent, networkCounters, showGroupBoardFromModel, tabsData; | |
| NetworkLayout = require('./views/network_layout'); | |
| GroupBoard = require('./views/group_board'); | |
| initGroupHelpers = require('./lib/group_helpers'); | |
| tabsData = require('./lib/network_tabs').tabsData; | |
| defaultTab = require('./lib/network_tabs').defaultTab; | |
| module.exports = { | |
| define: function(Redirect, app, Backbone, Marionette, $, _) { | |
| var Router; | |
| Router = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'network(/users)(/search)(/)': 'showSearchUsers', | |
| 'network/users/friends(/)': 'showFriends', | |
| 'network/users/invite(/)': 'showInvite', | |
| 'network/users/nearby(/)': 'showNearbyUsers', | |
| 'network(/groups)(/search)(/)': 'showSearchGroups', | |
| 'network/groups/user(/)': 'showUserGroups', | |
| 'network/groups/create(/)': 'showCreateGroup', | |
| 'network/groups/nearby(/)': 'showNearbyGroups', | |
| 'network/groups/:id(/:name)(/)': 'showGroupBoard', | |
| 'network/friends(/)': 'showFriends' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new Router({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| app.commands.setHandlers({ | |
| 'show:network': API.showNetworkLayout, | |
| 'show:network:friends': API.showFriends, | |
| 'show:network:groups': API.showGroups, | |
| 'show:group:board': API.showGroupBoardFromModel | |
| }); | |
| app.reqres.setHandlers({ | |
| 'get:network:counters': networkCounters | |
| }); | |
| return app.request('waitForUserData').then(initGroupHelpers).then(initRequestsCollectionsEvent.bind(this)); | |
| } | |
| }; | |
| initRequestsCollectionsEvent = function() { | |
| if (app.user.loggedIn) { | |
| return app.request('waitForData').then(function() { | |
| return app.vent.trigger('network:requests:udpate'); | |
| }); | |
| } | |
| }; | |
| API = { | |
| showSearchUsers: function(qs) { | |
| return API.showNetworkLayout('searchUsers', qs); | |
| }, | |
| showFriends: function() { | |
| return API.showNetworkLayout('friends'); | |
| }, | |
| showInvite: function() { | |
| return API.showNetworkLayout('invite'); | |
| }, | |
| showNearbyUsers: function(qs) { | |
| return API.showNetworkLayout('nearbyUsers', qs); | |
| }, | |
| showSearchGroups: function(qs) { | |
| return API.showNetworkLayout('searchGroups', qs); | |
| }, | |
| showUserGroups: function() { | |
| return API.showNetworkLayout('userGroups'); | |
| }, | |
| showCreateGroup: function() { | |
| return API.showNetworkLayout('createGroup'); | |
| }, | |
| showNearbyGroups: function(qs) { | |
| return API.showNetworkLayout('nearbyGroups', qs); | |
| }, | |
| showNetworkLayout: function(tab, qs) { | |
| var path, query; | |
| if (tab == null) { | |
| tab = defaultTab; | |
| } | |
| path = tabsData.all[tab].path; | |
| query = _.isNonEmptyString(qs) ? _.parseQuery(qs) : {}; | |
| if (app.request('require:loggedIn', _.buildPath(path, query))) { | |
| return app.layout.main.show(new NetworkLayout({ | |
| tab: tab, | |
| query: query | |
| })); | |
| } | |
| }, | |
| showGroupBoard: function(id, name) { | |
| return app.request('waitForUserData').then(function() { | |
| return app.request('get:group:model', id); | |
| }).then(showGroupBoardFromModel)["catch"](function(err) { | |
| _.error(err, 'get:group:model err'); | |
| return app.execute('show:404'); | |
| }); | |
| }, | |
| showGroupBoardFromModel: function(model) { | |
| showGroupBoardFromModel(model); | |
| return app.navigate(model.get('boardPathname')); | |
| } | |
| }; | |
| showGroupBoardFromModel = function(group) { | |
| if (group.mainUserIsMember()) { | |
| return app.layout.main.show(new GroupBoard({ | |
| model: group, | |
| standalone: true | |
| })); | |
| } else { | |
| return app.execute('show:inventory:group', group); | |
| } | |
| }; | |
| networkCounters = function() { | |
| var counters, friendsRequestsCount, groups, groupsRequestsCount, mainUserInvitationsCount, otherUsersRequestsCount, ref; | |
| friendsRequestsCount = ((ref = app.users.otherRequested) != null ? ref.length : void 0) || 0; | |
| groups = app.user.groups; | |
| mainUserInvitationsCount = (groups != null ? groups.mainUserInvited.length : void 0) || 0; | |
| otherUsersRequestsCount = (groups != null ? groups.otherUsersRequestsCount() : void 0) || 0; | |
| groupsRequestsCount = mainUserInvitationsCount + otherUsersRequestsCount; | |
| return counters = { | |
| friendsRequestsCount: counterUnlessZero(friendsRequestsCount), | |
| groupsRequestsCount: counterUnlessZero(groupsRequestsCount), | |
| total: counterUnlessZero(friendsRequestsCount + groupsRequestsCount) | |
| }; | |
| }; | |
| counterUnlessZero = function(count) { | |
| if (count === 0) { | |
| } else { | |
| return count; | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/network/plugins/group", function(exports, require, module) { | |
| var UsersList, behaviorsPlugin, events, handlers; | |
| UsersList = require('modules/users/views/users_list'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| events = { | |
| 'click .showGroup': 'showGroup', | |
| 'click .showGroupBoard': 'showGroupBoard', | |
| 'click .accept': 'acceptInvitation', | |
| 'click .decline': 'declineInvitation', | |
| 'click .joinRequest': 'joinRequest', | |
| 'click .cancelRequest': 'cancelRequest' | |
| }; | |
| handlers = { | |
| showGroup: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:inventory:group', this.model); | |
| } | |
| }, | |
| showGroupBoard: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:group:board', this.model); | |
| } | |
| }, | |
| getGroupMembersListView: function() { | |
| return new UsersList({ | |
| collection: this.model.members, | |
| groupContext: true, | |
| group: this.model | |
| }); | |
| }, | |
| getFriendsInvitorView: function() { | |
| var group; | |
| group = this.model; | |
| return new UsersList({ | |
| collection: app.users.friends, | |
| groupContext: true, | |
| group: group, | |
| emptyViewMessage: 'no friends to invite', | |
| filter: function(child, index, collection) { | |
| return group.userStatus(child) !== 'member'; | |
| } | |
| }); | |
| }, | |
| getJoinRequestsView: function() { | |
| return new UsersList({ | |
| collection: this.model.requested, | |
| groupContext: true, | |
| group: this.model, | |
| emptyViewMessage: 'no more pending requests' | |
| }); | |
| }, | |
| acceptInvitation: function() { | |
| return this.model.acceptInvitation(); | |
| }, | |
| declineInvitation: function() { | |
| return this.model.declineInvitation(); | |
| }, | |
| joinRequest: function() { | |
| if (app.request('require:loggedIn', this.model.get('pathname'))) { | |
| return this.model.requestToJoin()["catch"](behaviorsPlugin.Fail.call(this, 'joinRequest')); | |
| } | |
| }, | |
| cancelRequest: function() { | |
| return this.model.cancelRequest()["catch"](behaviorsPlugin.Fail.call(this, 'cancelRequest')); | |
| } | |
| }; | |
| module.exports = _.BasicPlugin(events, handlers); | |
| }); | |
| ;require.register("modules/network/plugins/users_search", function(exports, require, module) { | |
| var UsersList, events, handlers, regions, ui; | |
| UsersList = require('modules/users/views/users_list'); | |
| regions = { | |
| usersList: '#usersList' | |
| }; | |
| ui = { | |
| usersListHeader: '#usersListHeader', | |
| userSearch: '#userSearch', | |
| userField: '#userField' | |
| }; | |
| events = { | |
| 'keyup #userField': 'lazyUserSearch', | |
| 'click a.close': 'resetSearch' | |
| }; | |
| handlers = { | |
| showUsersSearchBase: function(stretch) { | |
| this.ui.userSearch.show(); | |
| return this.showFriends(stretch); | |
| }, | |
| showFriends: function(stretch) { | |
| if (stretch == null) { | |
| stretch = false; | |
| } | |
| this.usersList.show(new UsersList({ | |
| collection: app.users.filtered.friends(), | |
| stretch: stretch | |
| })); | |
| return this.setFriendsHeader(); | |
| }, | |
| updateUserSearch: function(e) { | |
| return this.searchUsers(e.target.value); | |
| }, | |
| searchUsers: function(query) { | |
| if (query !== this.lastQuery) { | |
| this.lastQuery = query; | |
| app.request('users:search', query); | |
| if ((query != null) && query !== '') { | |
| return this.setUserSearchHeader(); | |
| } else { | |
| return this.setFriendsHeader(); | |
| } | |
| } | |
| }, | |
| setFriendsHeader: function() { | |
| this.ui.usersListHeader.find('.header').text(_.i18n('friends')); | |
| this.ui.usersListHeader.find('.close').hide(); | |
| return this.callToActionIfFriendsListIsEmpty(); | |
| }, | |
| setUserSearchHeader: function() { | |
| this.ui.usersListHeader.find('.header').text(_.i18n('user search')); | |
| return this.ui.usersListHeader.find('.close').show(); | |
| }, | |
| resetSearch: function() { | |
| this.searchUsers(''); | |
| return this.ui.userField.val(''); | |
| }, | |
| callToActionIfFriendsListIsEmpty: function() { | |
| if (app.users.friends.length === 0) { | |
| $('.noUser').hide(); | |
| return $('.findFriends').show(); | |
| } | |
| } | |
| }; | |
| module.exports = function() { | |
| this.lastQuery = null; | |
| _.extend(this, handlers); | |
| this.lazyUserSearch = _.debounce(this.updateUserSearch.bind(this), 100); | |
| this.addRegions(regions); | |
| _.extend((this.events || (this.events = {})), events); | |
| _.extend((this.ui || (this.ui = {})), ui); | |
| }; | |
| }); | |
| ;require.register("modules/network/views/create_group_layout", function(exports, require, module) { | |
| var forms_, groupFormData, groupPlugin, groups_; | |
| forms_ = require('modules/general/lib/forms'); | |
| groups_ = require('../lib/groups'); | |
| groupPlugin = require('../plugins/group'); | |
| groupFormData = require('../lib/group_form_data'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'createGroupLayout', | |
| template: require('./templates/create_group_layout'), | |
| tagName: 'form', | |
| behaviors: { | |
| AlertBox: {}, | |
| ElasticTextarea: {} | |
| }, | |
| regions: { | |
| invite: '#invite' | |
| }, | |
| ui: { | |
| nameField: '#nameField', | |
| description: '#description', | |
| searchabilityToggler: '#searchabilityToggler', | |
| searchabilityWarning: '.searchability .warning' | |
| }, | |
| initialize: function() { | |
| return this.initPlugin(); | |
| }, | |
| initPlugin: function() { | |
| return groupPlugin.call(this); | |
| }, | |
| events: { | |
| 'click #createGroup': 'createGroup', | |
| 'change #searchabilityToggler': 'toggleSearchabilityWarning', | |
| 'click #showPositionPicker': 'showPositionPicker' | |
| }, | |
| serializeData: function() { | |
| return { | |
| description: groupFormData.description(), | |
| searchability: groupFormData.searchability() | |
| }; | |
| }, | |
| toggleSearchabilityWarning: function() { | |
| return this.ui.searchabilityWarning.slideToggle(); | |
| }, | |
| showPositionPicker: function() { | |
| return app.request('prompt:group:position:picker').then((function(_this) { | |
| return function(coords) { | |
| return _this.coords = coords; | |
| }; | |
| })(this))["catch"](_.Error('showPositionPicker')); | |
| }, | |
| createGroup: function() { | |
| var data, description, name; | |
| name = this.ui.nameField.val(); | |
| description = this.ui.description.val(); | |
| data = { | |
| name: name, | |
| description: description, | |
| searchable: this.ui.searchabilityToggler[0].checked, | |
| coords: this.coords | |
| }; | |
| return _.preq.start.then(groups_.validateName.bind(this, name, '#nameField')).then(groups_.validateDescription.bind(this, description, '#description')).then(groups_.createGroup.bind(null, data)).then(app.execute.bind(app, 'show:group:board'))["catch"](forms_.catchAlert.bind(null, this)); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/friends_layout", function(exports, require, module) { | |
| var Users, UsersList, behaviorsPlugin; | |
| UsersList = require('modules/users/views/users_list'); | |
| Users = require('modules/users/collections/users'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/friends_layout'), | |
| id: 'friendsLayout', | |
| tagName: 'section', | |
| regions: { | |
| friendsRequests: '#friendsRequests', | |
| friendsList: '#friendsList' | |
| }, | |
| ui: { | |
| friendsRequestsWrapper: '.friends-requests-wrapper', | |
| friendsFilterWrapper: '.friends-filter-wrapper', | |
| friendsFilter: '#friendsFilter' | |
| }, | |
| behaviors: { | |
| Loading: {}, | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| return this.friends = app.users.friends.filtered; | |
| }, | |
| events: { | |
| 'keyup #friendsFilter': 'filterFriends' | |
| }, | |
| serializeData: function() { | |
| return { | |
| friendsFilter: { | |
| id: 'friendsFilter', | |
| placeholder: 'search for your friends' | |
| } | |
| }; | |
| }, | |
| onRender: function() { | |
| behaviorsPlugin.startLoading.call(this, '#friendsList'); | |
| return app.request('waitForFriendsItems').then(this.showFriends.bind(this))["catch"](_.Error('showTabFriends')); | |
| }, | |
| showFriends: function() { | |
| this.showFriendsRequests(); | |
| this.showFriendsFilter(); | |
| return this.showFriendsLists(); | |
| }, | |
| showFriendsRequests: function() { | |
| var otherRequested; | |
| otherRequested = app.users.otherRequested; | |
| if (otherRequested.length > 0) { | |
| this.ui.friendsRequestsWrapper.show(); | |
| return this.friendsRequests.show(new UsersList({ | |
| collection: otherRequested, | |
| emptyViewMessage: 'no pending requests', | |
| stretch: true | |
| })); | |
| } | |
| }, | |
| showFriendsFilter: function() { | |
| if (this.friends.length > 8) { | |
| return this.ui.friendsFilterWrapper.show(); | |
| } | |
| }, | |
| filterFriends: function() { | |
| var text; | |
| text = this.ui.friendsFilter.val(); | |
| return this.friends.filterByText(text); | |
| }, | |
| showFriendsLists: function() { | |
| this.friends.resetFilters(); | |
| return this.friendsList.show(new UsersList({ | |
| collection: this.friends, | |
| emptyViewMessage: "you aren't connected to anyone yet", | |
| emptyViewLink: 'inviteFriends', | |
| stretch: true | |
| })); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/group", function(exports, require, module) { | |
| var groupPlugin; | |
| groupPlugin = require('../plugins/group'); | |
| module.exports = Marionette.ItemView.extend({ | |
| getTemplate: function() { | |
| if (this.options.highlighted) { | |
| return require('./templates/group_show'); | |
| } else { | |
| return require('./templates/group'); | |
| } | |
| }, | |
| className: function() { | |
| if (this.options.highlighted) { | |
| return 'groupShow'; | |
| } else { | |
| return 'group'; | |
| } | |
| }, | |
| tagName: function() { | |
| if (this.options.highlighted) { | |
| return 'div'; | |
| } else { | |
| return 'li'; | |
| } | |
| }, | |
| initialize: function() { | |
| this.initPlugin(); | |
| this.lazyRender = _.LazyRender(this); | |
| return this.listenTo(this.model, 'change', this.lazyRender); | |
| }, | |
| initPlugin: function() { | |
| return groupPlugin.call(this); | |
| }, | |
| behaviors: { | |
| PreventDefault: {}, | |
| SuccessCheck: {}, | |
| Unselect: {} | |
| }, | |
| onShow: function() { | |
| if (this.options.highlighted) { | |
| return app.execute('current:username:set', this.model.get('name')); | |
| } | |
| }, | |
| onDestroy: function() { | |
| if (this.options.highlighted) { | |
| return app.execute('current:username:hide'); | |
| } | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.serializeData(), { | |
| highlighted: this.options.highlighted | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/group_board", function(exports, require, module) { | |
| var GroupBoardHeader, GroupSettings, groupPlugin, sectionsData; | |
| groupPlugin = require('../plugins/group'); | |
| GroupBoardHeader = require('./group_board_header'); | |
| GroupSettings = require('./group_settings'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/group_board'), | |
| className: function() { | |
| var standalone; | |
| standalone = this.options.standalone ? 'standalone' : ''; | |
| return "groupBoard " + standalone; | |
| }, | |
| initialize: function() { | |
| this.initPlugin(); | |
| return this.listenTo(this.model, 'action:leave', this.render.bind(this)); | |
| }, | |
| initPlugin: function() { | |
| return groupPlugin.call(this); | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| regions: { | |
| header: '.header', | |
| groupSettings: '#groupSettings > .inner', | |
| groupRequests: '#groupRequests > .inner', | |
| groupMembers: '#groupMembers > .inner', | |
| groupInvite: '#groupInvite > .inner' | |
| }, | |
| ui: { | |
| groupSettings: '#groupSettings > .inner', | |
| groupRequests: '#groupRequests > .inner', | |
| groupMembers: '#groupMembers > .inner', | |
| groupInvite: '#groupInvite > .inner', | |
| groupRequestsSection: '#groupRequests' | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.serializeData(); | |
| attrs.sections = sectionsData; | |
| return attrs; | |
| }, | |
| events: { | |
| 'click .section-toggler': 'toggleSection', | |
| 'click .joinRequest': 'requestToJoin' | |
| }, | |
| showHeader: function() { | |
| return this.header.show(new GroupBoardHeader({ | |
| model: this.model | |
| })); | |
| }, | |
| toggleSection: function(e) { | |
| var section; | |
| section = e.currentTarget.parentElement.attributes.id.value; | |
| if (section === 'groupSettings') { | |
| return this.toggleSettings(); | |
| } else { | |
| return this.toggleUi(section); | |
| } | |
| }, | |
| toggleUi: function(uiLabel, skipToggle) { | |
| var $el, $parent; | |
| if (skipToggle == null) { | |
| skipToggle = false; | |
| } | |
| $el = this.ui[uiLabel]; | |
| $parent = $el.parent(); | |
| if (!skipToggle) { | |
| $el.slideToggle(); | |
| } | |
| $parent.find('.fa-caret-down').toggleClass('toggled'); | |
| if ($el.visible()) { | |
| return _.scrollTop($parent); | |
| } | |
| }, | |
| onRender: function() { | |
| this.showHeader(); | |
| this.showMembers(); | |
| this.showJoinRequests(); | |
| if (this.model.mainUserIsMember()) { | |
| this.initSettings(); | |
| return this.showFriendsInvitor(); | |
| } | |
| }, | |
| onShow: function() { | |
| return this.listenToOnce(this.model.requested, 'add', this.showJoinRequests.bind(this)); | |
| }, | |
| initSettings: function() { | |
| if (this.options.standalone && this.model.mainUserIsAdmin()) { | |
| return this.showSettings(); | |
| } else { | |
| this.toggleUi('groupSettings'); | |
| return this._settingsShownOnce = false; | |
| } | |
| }, | |
| toggleSettings: function() { | |
| if (this._settingsShownOnce) { | |
| return this.toggleUi('groupSettings'); | |
| } else { | |
| this.showSettings(); | |
| return this.toggleUi('groupSettings', true); | |
| } | |
| }, | |
| showSettings: function() { | |
| this._settingsShownOnce = true; | |
| return this.groupSettings.show(new GroupSettings({ | |
| model: this.model | |
| })); | |
| }, | |
| showJoinRequests: function() { | |
| if (this.model.requested.length > 0 && this.model.mainUserIsAdmin()) { | |
| this.groupRequests.show(this.getJoinRequestsView()); | |
| return this.ui.groupRequestsSection.show(); | |
| } else { | |
| return this.ui.groupRequestsSection.hide(); | |
| } | |
| }, | |
| showMembers: function() { | |
| return this.groupMembers.show(this.getGroupMembersListView()); | |
| }, | |
| showFriendsInvitor: function() { | |
| return this.groupInvite.show(this.getFriendsInvitorView()); | |
| } | |
| }); | |
| sectionsData = { | |
| settings: { | |
| label: 'settings', | |
| icon: 'cog' | |
| }, | |
| requests: { | |
| label: 'requests waiting your approval', | |
| icon: 'inbox' | |
| }, | |
| members: { | |
| label: 'members', | |
| icon: 'users' | |
| }, | |
| invite: { | |
| label: 'invite friends', | |
| icon: 'envelope' | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/network/views/group_board_header", function(exports, require, module) { | |
| var groupPlugin; | |
| groupPlugin = require('../plugins/group'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/group_board_header'), | |
| className: 'group-board-header', | |
| initialize: function() { | |
| this.initPlugin(); | |
| this.lazyRender = _.LazyRender(this); | |
| this.listenTo(this.model, 'change', this.lazyRender); | |
| return app.request('waitForFriendsItems').then(this.lazyRender); | |
| }, | |
| initPlugin: function() { | |
| return groupPlugin.call(this); | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.serializeData(); | |
| attrs.invitor = this.invitorData(); | |
| return attrs; | |
| }, | |
| invitorData: function() { | |
| var ref, username; | |
| username = (ref = this.model.findMainUserInvitor()) != null ? ref.get('username') : void 0; | |
| return { | |
| username: username | |
| }; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/group_settings", function(exports, require, module) { | |
| var PicturePicker, behaviorsPlugin, error_, forms_, groupFormData, groups_; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| forms_ = require('modules/general/lib/forms'); | |
| groups_ = require('../lib/groups'); | |
| error_ = require('lib/error'); | |
| PicturePicker = require('modules/general/views/behaviors/picture_picker'); | |
| groupFormData = require('../lib/group_form_data'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/group_settings'), | |
| behaviors: { | |
| AlertBox: {}, | |
| ConfirmationModal: {}, | |
| ElasticTextarea: {}, | |
| PreventDefault: {}, | |
| SuccessCheck: {}, | |
| BackupForm: {} | |
| }, | |
| initialize: function() { | |
| return this.lazyRender = _.LazyRender(this, 500); | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.serializeData(); | |
| return _.extend(attrs, { | |
| editName: this.editNameData(attrs.name), | |
| editDescription: groupFormData.description(attrs.description), | |
| userCanLeave: this.model.userCanLeave(), | |
| userIsLastUser: this.model.userIsLastUser(), | |
| searchability: groupFormData.searchability(attrs.searchable) | |
| }); | |
| }, | |
| editNameData: function(groupName) { | |
| return { | |
| nameBase: 'editName', | |
| field: { | |
| value: groupName, | |
| placeholder: groupName | |
| }, | |
| button: { | |
| text: _.I18n('save') | |
| }, | |
| check: true | |
| }; | |
| }, | |
| ui: { | |
| editNameField: '#editNameField', | |
| description: '#description', | |
| saveCancel: '.saveCancel', | |
| searchabilityWarning: '.searchability .warning' | |
| }, | |
| events: { | |
| 'click #editNameButton': 'editName', | |
| 'click a#changePicture': 'changePicture', | |
| 'change #searchabilityToggler': 'toggleSearchability', | |
| 'keyup #description': 'showSaveCancel', | |
| 'click .cancelButton': 'cancelDescription', | |
| 'click .saveButton': 'saveDescription', | |
| 'click a.leave': 'leaveGroup', | |
| 'click a.destroy': 'destroyGroup', | |
| 'click #showPositionPicker': 'showPositionPicker' | |
| }, | |
| onShow: function() { | |
| this.listenTo(this.model, 'change:picture', this.lazyRender); | |
| this.listenTo(this.model, 'change:searchable', this.lazyRender); | |
| this.listenTo(this.model, 'change:position', this.lazyRender); | |
| return this.listenTo(this.model, 'list:change:after', this.lazyRender); | |
| }, | |
| editName: function() { | |
| var name; | |
| name = this.ui.editNameField.val(); | |
| if (name != null) { | |
| return _.preq.start.then(groups_.validateName.bind(this, name, '#editNameField')).then(_.Full(this._updateGroup, this, 'name', name, '#editNameField'))["catch"](forms_.catchAlert.bind(null, this)); | |
| } | |
| }, | |
| _updateGroup: function(attribute, value, selector) { | |
| return app.request('group:update:settings', { | |
| model: this.model, | |
| attribute: attribute, | |
| value: value, | |
| selector: selector | |
| }); | |
| }, | |
| changePicture: function() { | |
| return app.layout.modal.show(new PicturePicker({ | |
| pictures: this.model.get('picture'), | |
| save: this._savePicture.bind(this), | |
| limit: 1 | |
| })); | |
| }, | |
| _savePicture: function(pictures) { | |
| var picture; | |
| picture = pictures[0]; | |
| _.log(picture, 'picture'); | |
| if (!_.isLocalImg(picture)) { | |
| throw new Error('couldnt save picture: requires a local image url'); | |
| } | |
| return this.updateSettings({ | |
| attribute: 'picture', | |
| value: picture, | |
| selector: '#changePicture' | |
| }); | |
| }, | |
| toggleSearchability: function(e) { | |
| var checked; | |
| checked = e.currentTarget.checked; | |
| this.ui.searchabilityWarning.slideToggle(); | |
| return this.updateSettings({ | |
| attribute: 'searchable', | |
| value: checked | |
| }); | |
| }, | |
| updateSettings: function(update) { | |
| update.model = this.model; | |
| return app.request('group:update:settings', update); | |
| }, | |
| showSaveCancel: function() { | |
| this._saveCancelShown = false; | |
| if (!this._saveCancelShown) { | |
| this.ui.saveCancel.slideDown(); | |
| return this._saveCancelShown = true; | |
| } | |
| }, | |
| cancelDescription: function() { | |
| this.render(); | |
| return this._saveCancelShown = false; | |
| }, | |
| saveDescription: function() { | |
| var description; | |
| this.ui.saveCancel.slideUp(); | |
| this._saveCancelShown = false; | |
| description = this.ui.description.val(); | |
| if (description != null) { | |
| return _.preq.start.then(groups_.validateDescription.bind(this, description, '#description')).then(_.Full(this._updateGroup, this, 'description', description, '#description'))["catch"](forms_.catchAlert.bind(null, this)); | |
| } | |
| }, | |
| leaveGroup: function() { | |
| return this._leaveGroup('leave_group_confirmation', 'leave_group_warning'); | |
| }, | |
| destroyGroup: function() { | |
| return this._leaveGroup('destroy_group_confirmation', 'cant_undo_warning'); | |
| }, | |
| _leaveGroup: function(confirmationText, warningText) { | |
| var args, group; | |
| group = this.model; | |
| args = { | |
| groupName: group.get('name') | |
| }; | |
| return this.$el.trigger('askConfirmation', { | |
| confirmationText: _.i18n(confirmationText, args), | |
| warningText: _.i18n(warningText), | |
| action: group.leave.bind(group), | |
| selector: '#usernameGroup' | |
| }); | |
| }, | |
| showPositionPicker: function() { | |
| return app.execute('show:position:picker:group', this.model); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/groups_layout", function(exports, require, module) { | |
| var GroupsList, UsersList, behaviorsPlugin; | |
| UsersList = require('modules/users/views/users_list'); | |
| GroupsList = require('./groups_list'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/groups_layout'), | |
| id: 'groupsLayout', | |
| tagName: 'section', | |
| regions: { | |
| groupsInvitations: '#groupsInvitations', | |
| groupList: '#groupsList' | |
| }, | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| onShow: function() { | |
| behaviorsPlugin.startLoading.call(this, '#groupsList'); | |
| return app.request('waitForFriendsItems').then(this.showGroupsLists.bind(this))["catch"](_.Error('showTabGroups')); | |
| }, | |
| showGroupsLists: function() { | |
| this.showGroupsInvitations(); | |
| return this.showGroupsList(); | |
| }, | |
| showGroupsInvitations: function() { | |
| var mainUserInvited; | |
| mainUserInvited = app.user.groups.mainUserInvited; | |
| if (mainUserInvited.length > 0) { | |
| return this.groupsInvitations.show(new GroupsList({ | |
| collection: mainUserInvited, | |
| mode: 'board', | |
| emptyViewMessage: "you have no more pending invitations" | |
| })); | |
| } | |
| }, | |
| showGroupsList: function() { | |
| return this.groupList.show(new GroupsList({ | |
| collection: app.user.groups.mainUserMember, | |
| mode: 'board' | |
| })); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/groups_list", function(exports, require, module) { | |
| module.exports = Marionette.CollectionView.extend({ | |
| className: 'groupsList', | |
| tagName: 'ul', | |
| getChildView: function() { | |
| switch (this.options.mode) { | |
| case 'board': | |
| return require('./group_board'); | |
| case 'preview': | |
| return require('./group_board_header'); | |
| default: | |
| return require('./group'); | |
| } | |
| }, | |
| emptyView: require('./no_group'), | |
| emptyViewOptions: function() { | |
| var ref; | |
| return { | |
| message: ((ref = this.options) != null ? ref.emptyViewMessage : void 0) || "you aren't in any group yet" | |
| }; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/groups_search_layout", function(exports, require, module) { | |
| var GroupsList, updateRoute; | |
| GroupsList = require('./groups_list'); | |
| updateRoute = require('../lib/update_query_route')('searchGroups'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/groups_search_layout'), | |
| id: 'groupsSearchLayout', | |
| regions: { | |
| 'groupsList': '#groupsList' | |
| }, | |
| ui: { | |
| groupSearch: '#groupSearch' | |
| }, | |
| events: { | |
| 'keyup #groupSearch': 'searchGroupFromEvent' | |
| }, | |
| initialize: function() { | |
| var q; | |
| q = this.options.query.q; | |
| this.lastSearch = q || ''; | |
| return app.request('waitForUserData').then(this.initSearch.bind(this, q)); | |
| }, | |
| initSearch: function(q) { | |
| this.collection = app.user.groups.filtered.resetFilters(); | |
| app.execute('fetch:last:group:created'); | |
| if (_.isNonEmptyString(q)) { | |
| return this.searchGroup(q); | |
| } | |
| }, | |
| serializeData: function() { | |
| return { | |
| groupsSearch: { | |
| id: 'groupSearch', | |
| placeholder: 'search a group', | |
| value: this.lastSearch | |
| } | |
| }; | |
| }, | |
| onShow: function() { | |
| return app.request('waitForData').then(this.showGroupList.bind(this)); | |
| }, | |
| showGroupList: function() { | |
| this.groupsList.show(new GroupsList({ | |
| collection: this.collection, | |
| mode: 'preview', | |
| emptyViewMessage: 'no group found with this name' | |
| })); | |
| return $('.noGroup').hide(); | |
| }, | |
| searchGroupFromEvent: function() { | |
| return this.searchGroup(this.ui.groupSearch.val()); | |
| }, | |
| searchGroup: function(text) { | |
| updateRoute(text); | |
| this.lastSearch = text; | |
| return this.collection.searchByText(text); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/invite_friends", function(exports, require, module) { | |
| var UsersList, behaviorsPlugin, forms_, invitationsError, sendInvitationsByEmails; | |
| UsersList = require('modules/users/views/users_list'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/invite_friends'), | |
| id: 'inviteFriends', | |
| regions: { | |
| usersAlreadyThereRegion: '#usersAlreadyThere' | |
| }, | |
| ui: { | |
| invitations: '#invitations', | |
| addMessage: '#addMessage', | |
| message: '#message', | |
| output: '#output', | |
| usersAlreadyThere: '.usersAlreadyThere' | |
| }, | |
| behaviors: { | |
| Loading: {}, | |
| ElasticTextarea: {}, | |
| AlertBox: {}, | |
| SuccessCheck: {} | |
| }, | |
| events: { | |
| 'click #sendInvitations': 'sendInvitations', | |
| 'click #addMessage': 'toggleMessage' | |
| }, | |
| initialize: function() { | |
| this.emailsInvited = []; | |
| return this.usersAlreadyThere = new Backbone.Collection; | |
| }, | |
| onRender: function() { | |
| return this.usersAlreadyThereRegion.show(new UsersList({ | |
| collection: this.usersAlreadyThere, | |
| stretch: true | |
| })); | |
| }, | |
| serializeData: function() { | |
| return { | |
| rawEmails: this.rawEmails, | |
| message: this.message, | |
| emailsInvited: this.emailsInvited | |
| }; | |
| }, | |
| sendInvitations: function() { | |
| this.rawEmails = this.ui.invitations.val(); | |
| this.message = this.ui.message.val(); | |
| return sendInvitationsByEmails(this.rawEmails, this.message)["catch"](invitationsError).then(_.Log('invitation data')).then(this._spreadUsers.bind(this)).then(this._showResults.bind(this))["catch"](forms_.catchAlert.bind(null, this))["catch"](behaviorsPlugin.Fail.call(this, 'invitations err')); | |
| }, | |
| _spreadUsers: function(data) { | |
| var emails, i, len, results, user, users; | |
| users = data.users, emails = data.emails; | |
| this.addEmailsInvited(emails); | |
| results = []; | |
| for (i = 0, len = users.length; i < len; i++) { | |
| user = users[i]; | |
| results.push(this._addUser(user)); | |
| } | |
| return results; | |
| }, | |
| addEmailsInvited: function(emails) { | |
| return this.emailsInvited = _.uniq(this.emailsInvited.concat(emails)); | |
| }, | |
| _addUser: function(user) { | |
| var userModel; | |
| userModel = app.request('user:public:add', user); | |
| userModel.set('email', user.email); | |
| this.usersAlreadyThere.add(userModel); | |
| switch (userModel.get('status')) { | |
| case 'public': | |
| return app.request('request:send', userModel); | |
| case 'otherRequested': | |
| return app.request('request:accept', userModel, false); | |
| } | |
| }, | |
| _showResults: function() { | |
| this.render(); | |
| if (this.usersAlreadyThere.length > 0) { | |
| this.ui.usersAlreadyThere.slideDown(); | |
| } | |
| return setTimeout(_.scrollTop.bind(null, this.ui.invitations), 250); | |
| }, | |
| toggleMessage: function() { | |
| this.ui.addMessage.slideUp(); | |
| return this.ui.message.slideDown(); | |
| } | |
| }); | |
| sendInvitationsByEmails = function(rawEmails, message) { | |
| return app.request('invitations:by:emails', rawEmails, message); | |
| }; | |
| invitationsError = function(err) { | |
| err.selector = '#invitations'; | |
| throw err; | |
| }; | |
| }); | |
| ;require.register("modules/network/views/nearby_groups_layout", function(exports, require, module) { | |
| var GroupsList, getBbox, grabMap, initMap, path, ref, ref1, refreshListFilter, regions, showGroupsOnMap; | |
| ref = require('../lib/nearby_layouts'), initMap = ref.initMap, regions = ref.regions, grabMap = ref.grabMap, refreshListFilter = ref.refreshListFilter; | |
| ref1 = require('modules/map/lib/map'), showGroupsOnMap = ref1.showGroupsOnMap, getBbox = ref1.getBbox; | |
| path = require('../lib/network_tabs').tabsData.groups.nearbyGroups.path; | |
| GroupsList = require('./groups_list'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/nearby_layout'), | |
| id: 'nearbyGroupsLayout', | |
| regions: regions, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| events: { | |
| 'click .groupIcon a': 'showGroup' | |
| }, | |
| initMap: function() { | |
| this.collection || (this.collection = app.user.groups.filtered.resetFilters()); | |
| return initMap({ | |
| query: this.options.query, | |
| path: path, | |
| showObjects: this.showGroupsNearby.bind(this), | |
| onMoveend: this.onMovend.bind(this) | |
| }).then(grabMap.bind(this)).then(this.initList.bind(this))["catch"](_.Error('initMap')); | |
| }, | |
| initialize: function() { | |
| return this.lazyInitMap = _.debounce(this.initMap.bind(this), 300); | |
| }, | |
| onRender: function() { | |
| return app.request('waitForData').then(this.lazyInitMap.bind(this)); | |
| }, | |
| onMovend: function() { | |
| refreshListFilter.call(this); | |
| return this.showGroupsNearby(this.map); | |
| }, | |
| showGroupsNearby: function(map) { | |
| return this.collection.searchByPosition(getBbox(map)).then(this.updateGroupsMarkers.bind(this)); | |
| }, | |
| updateGroupsMarkers: function() { | |
| return showGroupsOnMap(this.map, this.collection.models); | |
| }, | |
| showGroup: function(e) { | |
| var id; | |
| if (!_.isOpenedOutside(e)) { | |
| id = e.currentTarget.href.split('/')[2]; | |
| return app.execute('show:inventory:group', id); | |
| } | |
| }, | |
| initList: function() { | |
| this.list.show(new GroupsList({ | |
| collection: this.collection, | |
| mode: 'preview', | |
| emptyViewMessage: "can't find any group at this location" | |
| })); | |
| return refreshListFilter.call(this); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/nearby_users_layout", function(exports, require, module) { | |
| var UsersList, getBbox, grabMap, initMap, path, ref, ref1, refreshListFilter, regions, showUserOnMap, showUsersOnMap, updateMarker; | |
| ref = require('modules/map/lib/map'), showUsersOnMap = ref.showUsersOnMap, showUserOnMap = ref.showUserOnMap, updateMarker = ref.updateMarker, getBbox = ref.getBbox; | |
| path = require('../lib/network_tabs').tabsData.users.nearbyUsers.path; | |
| UsersList = require('modules/users/views/users_list'); | |
| ref1 = require('../lib/nearby_layouts'), initMap = ref1.initMap, regions = ref1.regions, grabMap = ref1.grabMap, refreshListFilter = ref1.refreshListFilter; | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/nearby_users_layout'), | |
| id: 'nearbyUsersLayout', | |
| regions: regions, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| events: { | |
| 'click #showPositionPicker': function() { | |
| return app.execute('show:position:picker:main:user'); | |
| } | |
| }, | |
| initMap: function() { | |
| return initMap({ | |
| query: this.options.query, | |
| path: path, | |
| showObjects: this.showUsersNearby.bind(this), | |
| onMoveend: this.onMovend.bind(this) | |
| }).then(grabMap.bind(this)).then(this.initList.bind(this))["catch"](_.Error('initMap')); | |
| }, | |
| initialize: function() { | |
| this.collection = app.users.filtered.resetFilters(); | |
| this.listenTo(app.user, 'change:position', this.updateMainUserPosition.bind(this)); | |
| return this.lazyInitMap = _.debounce(this.initMap.bind(this), 300); | |
| }, | |
| onRender: function() { | |
| return app.request('waitForData').then(this.lazyInitMap.bind(this)); | |
| }, | |
| serializeData: function() { | |
| return { | |
| hasPosition: app.user.hasPosition() | |
| }; | |
| }, | |
| onMovend: function() { | |
| refreshListFilter.call(this); | |
| return this.showUsersNearby(this.map); | |
| }, | |
| showUsersNearby: function(map) { | |
| return app.request('users:search:byPosition', getBbox(map)).then(this.updateUsersMarkers.bind(this)); | |
| }, | |
| updateUsersMarkers: function() { | |
| showUsersOnMap(this.map, this.collection.models); | |
| return this.mainUserMarker = showUserOnMap(this.map, app.user); | |
| }, | |
| initList: function() { | |
| this.list.show(new UsersList({ | |
| collection: this.collection, | |
| stretch: true, | |
| emptyViewMessage: "can't find any user at this location", | |
| filter: function(model) { | |
| return model.id !== app.user.id; | |
| } | |
| })); | |
| return refreshListFilter.call(this); | |
| }, | |
| updateMainUserPosition: function() { | |
| if (this.mainUserMarker != null) { | |
| return updateMarker(this.mainUserMarker, app.user.getCoords()); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/network_layout", function(exports, require, module) { | |
| var Tabs, ref, resolveCurrentTab, tabsData; | |
| Tabs = require('./tabs'); | |
| ref = require('../lib/network_tabs'), tabsData = ref.tabsData, resolveCurrentTab = ref.resolveCurrentTab; | |
| module.exports = Marionette.LayoutView.extend({ | |
| template: require('./templates/network_layout'), | |
| id: 'networkLayout', | |
| regions: { | |
| tabs: '.custom-tabs-titles', | |
| content: '.custom-tabs-content' | |
| }, | |
| childEvents: { | |
| 'tabs:change': 'updateLayout' | |
| }, | |
| onShow: function() { | |
| var tab; | |
| tab = this.options.tab; | |
| this.tabs.show(new Tabs({ | |
| tab: tab | |
| })); | |
| return this.showLayout(tab); | |
| }, | |
| updateLayout: function(view, tab) { | |
| return this.showLayout(tab); | |
| }, | |
| showLayout: function(tab) { | |
| var Layout, layout; | |
| tab = resolveCurrentTab(tab); | |
| layout = tabsData.all[tab].layout; | |
| Layout = require("./" + layout); | |
| return this.content.show(new Layout(this.options)); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/no_group", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/no_group'), | |
| className: 'noGroup', | |
| tagName: 'li', | |
| serializeData: function() { | |
| return { | |
| message: this.options.message | |
| }; | |
| }, | |
| onShow: function() { | |
| return this.$el.hide().fadeIn(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/network/views/tabs", function(exports, require, module) { | |
| var getNameFromId, navigate, ref, resolveCurrentTab, tabsData, updateTitle; | |
| ref = require('../lib/network_tabs'), tabsData = ref.tabsData, resolveCurrentTab = ref.resolveCurrentTab, getNameFromId = ref.getNameFromId; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/tabs'), | |
| className: 'tabs', | |
| events: { | |
| 'click .tab': 'updateTabs' | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| var tab; | |
| tab = this.options.tab; | |
| this.currentTab = tab; | |
| this.currentTabData = tabsData.all[tab]; | |
| this.lazyRender = _.LazyRender(this); | |
| return app.request('waitForData').then(this.lazyRender).then(this.listenToRequestsCollections.bind(this)); | |
| }, | |
| updateTabs: function(e) { | |
| var tab; | |
| if (!_.isOpenedOutside(e)) { | |
| tab = getNameFromId(e.currentTarget.id); | |
| tab = resolveCurrentTab(tab); | |
| if (tab !== this.currentTab) { | |
| this.triggerMethod('tabs:change', tab); | |
| this.currentTab = tab; | |
| this.currentTabData = tabsData.all[tab]; | |
| return this.render(); | |
| } | |
| } | |
| }, | |
| serializeData: function() { | |
| var counter, counters, data, k, name, parent, ref1, subTabsData, v; | |
| counters = app.request('get:network:counters'); | |
| ref1 = this.currentTabData, parent = ref1.parent, name = ref1.name; | |
| subTabsData = tabsData[parent]; | |
| for (k in subTabsData) { | |
| v = subTabsData[k]; | |
| v.active = false; | |
| counter = v.counter; | |
| if (counter != null) { | |
| v.count = counters[counter]; | |
| } | |
| } | |
| subTabsData[name].active = true; | |
| data = _.extend(counters, { | |
| subTabsData: subTabsData | |
| }); | |
| data[parent] = true; | |
| return data; | |
| }, | |
| onRender: function() { | |
| return this.updateMetadata(); | |
| }, | |
| listenToRequestsCollections: function() { | |
| return this.listenTo(app.vent, 'network:requests:udpate', this.lazyRender); | |
| }, | |
| updateMetadata: function() { | |
| var path, ref1, title; | |
| ref1 = this.currentTabData, path = ref1.path, title = ref1.title; | |
| navigate(path); | |
| return updateTitle(title); | |
| } | |
| }); | |
| navigate = function(path) { | |
| if (path !== _.currentRoute()) { | |
| return app.navigate(path); | |
| } | |
| }; | |
| updateTitle = function(title) { | |
| var network; | |
| title = _.I18n(title); | |
| network = _.I18n('network'); | |
| return app.execute('metadata:update:title', title + " - " + network); | |
| }; | |
| }); | |
| ;require.register("modules/network/views/templates/create_group_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<label for=\"nameField\">" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"group name",{"name":"I18n","hash":{},"data":data})) | |
| + "</label>\n<div class=\"inputContainer\">\n <input id=\"nameField\" type=\"text\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"ex: the secret club of Proustian experts",{"name":"i18n","hash":{},"data":data})) | |
| + "\" class=\"enterClick\">\n</div>\n\n<label for=\"description\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"description",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n" | |
| + alias3((helpers.textarea || (depth0 && depth0.textarea) || alias2).call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"textarea","hash":{},"data":data})) | |
| + "\n\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:searchability",(depth0 != null ? depth0.searchability : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_position_setting",{"name":"partial","hash":{},"data":data})) | |
| + "\n\n<a id=\"createGroup\" class=\"button light-blue bold radius\" tabindex=\"0\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"plus",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"create group",{"name":"I18n","hash":{},"data":data})) | |
| + "\n</a>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/friends_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<section class=\"friends-requests-wrapper hidden\">\n <h3 id=\"friendsRequestsHeader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pending friends requests",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <div id=\"friendsRequests\"></div>\n</section>\n\n<section class=\"friends-list\">\n <div class=\"friends-filter-wrapper hidden\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"filter",(depth0 != null ? depth0.friendsFilter : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n <div id=\"friendsList\">\n <span class=\"loading\"></span>\n </div>\n</section>\n\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"showGroup\">\n <img src=\"" | |
| + alias4((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.picture : depth0),48,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + "\" class=\"groupPic\">\n <span class=\"name\">" | |
| + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + "</span>\n</a>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_actions", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"accept\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"accept invitation",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <a class=\"decline\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"decline",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div>\n <p class=\"requested\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"you requested to join is waiting for approval",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n <a class=\"cancelRequest\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"cancel request",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <span class=\"check\"></span>\n </div>\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| return " <a class=\"joinRequest\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"request to join group",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <span class=\"check\"></span>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <p class=\"restrictions\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"globe",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"as you are not a member of the group, you can only see members' public books",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return "<div class=\"actions\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.status_invited : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.status_requested : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.status_none : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.mainUserIsMember : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_board", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "class=\"hidden\""; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " <section id=\"groupSettings\">\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"network:group_board_section",((stack1 = (depth0 != null ? depth0.sections : depth0)) != null ? stack1.settings : stack1),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"header\"></div>\n<div class=\"body\">\n <section id=\"groupRequests\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_board_section",((stack1 = (depth0 != null ? depth0.sections : depth0)) != null ? stack1.requests : stack1),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n <section id=\"groupMembers\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_board_section",((stack1 = (depth0 != null ? depth0.sections : depth0)) != null ? stack1.members : stack1),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n <section id=\"groupInvite\" " | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.status_member : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_board_section",((stack1 = (depth0 != null ? depth0.sections : depth0)) != null ? stack1.invite : stack1),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.mainUserIsMember : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_board_header", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return " class=\"cover\"\n style=\"background-image: url('" | |
| + container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.picture : depth0),540,{"name":"src","hash":{},"data":data})) | |
| + "')\"\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <span class=\"searchable\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"this group appears in search resuts",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"globe",{"name":"icon","hash":{},"data":data})) | |
| + "\n </span>\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <span class=\"not-searchable\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"only those who get the link or are invited can find this group",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"lock",{"name":"icon","hash":{},"data":data})) | |
| + "\n </span>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| return " <span class=\"invitor\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"group_invitor",(depth0 != null ? depth0.invitor : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"cover-link showGroup\">\n <div\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.picture : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " >\n <span class=\"name\">" | |
| + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + "</span>\n <span class=\"description\">" | |
| + alias4(((helper = (helper = helpers.description || (depth0 != null ? depth0.description : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"description","hash":{},"data":data}) : helper))) | |
| + "</span>\n " | |
| + alias4((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_stats",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n</a>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.searchable : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(5, data, 0),"data":data})) != null ? stack1 : "") | |
| + "<a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"link showGroup\">" | |
| + alias4((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"go to the group inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n<div class=\"bottom\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.invitor : depth0)) != null ? stack1.username : stack1),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " " | |
| + alias4((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_actions",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_board_section", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a class=\"section-toggler\">\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,(depth0 != null ? depth0.label : depth0),{"name":"I18n","hash":{},"data":data})) | |
| + "</h4>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"caret-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n</a>\n<div class=\"inner\"></div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_position_setting", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"group-position-setting\">\n <div>\n <label for=\"showPositionPicker\">\n " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"set the group's position",{"name":"I18n","hash":{},"data":data})) | |
| + "\n </label>\n <span class=\"tip\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"group_position_context",{"name":"i18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"info-circle",{"name":"icon","hash":{},"data":data})) | |
| + "</span>\n </div>\n <a id=\"showPositionPicker\" class=\"button radius\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"map-marker",{"name":"icon","hash":{},"data":data})) | |
| + "\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_settings", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <section>\n <label for=\"editName\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"name",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n " | |
| + alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.editName : depth0),"check",{"name":"input","hash":{},"data":data})) | |
| + "\n </section>\n <hr>\n\n <section>\n <label for=\"editDescription\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"description",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n " | |
| + alias3((helpers.textarea || (depth0 && depth0.textarea) || alias2).call(alias1,(depth0 != null ? depth0.editDescription : depth0),"check",{"name":"textarea","hash":{},"data":data})) | |
| + "\n <div class=\"saveCancel hidden\">" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"save_cancel",{"name":"partial","hash":{},"data":data})) | |
| + "</div>\n <div class=\"check\"></div>\n </section>\n <hr>\n\n <section>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:searchability",(depth0 != null ? depth0.searchability : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n <hr>\n\n <section>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"general:behaviors:change_picture",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n <hr>\n\n <label>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"geolocation",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <p class=\"position-status\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.hasPosition : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </p>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_position_setting",{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4=container.lambda; | |
| return " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"the group has a position set",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"check",{"name":"icon","hash":{},"data":data})) | |
| + "<br>\n <span class=\"coordinates\">" | |
| + alias3(alias4(((stack1 = (depth0 != null ? depth0.position : depth0)) != null ? stack1.lat : stack1), depth0)) | |
| + ", " | |
| + alias3(alias4(((stack1 = (depth0 != null ? depth0.position : depth0)) != null ? stack1.lng : stack1), depth0)) | |
| + "</span>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"the group's positon isn't set yet",{"name":"i18n","hash":{},"data":data})) | |
| + "\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.userIsLastUser : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.program(9, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </a>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"destroy\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"trash",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"destroy group",{"name":"I18n","hash":{},"data":data})) | |
| + "\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"leave\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"sign-out",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"leave group",{"name":"I18n","hash":{},"data":data})) | |
| + "\n"; | |
| },"11":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <span class=\"leave disabled\" title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"leave_button_disabled",{"name":"i18n","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"ban",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"leave group",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </span>\n <p class=\"reason\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"leave_button_disabled",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.mainUserIsAdmin : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n<section id=\"groupControls\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.userCanLeave : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.program(11, data, 0),"data":data})) != null ? stack1 : "") | |
| + "</section>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_show", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <a class=\"showGroupBoard\" href=\"" | |
| + alias3(((helper = (helper = helpers.boardPathname || (depth0 != null ? depth0.boardPathname : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"boardPathname","hash":{},"data":data}) : helper))) | |
| + "\"\n title=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"settings",{"name":"i18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"cog",{"name":"icon","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " class=\"cover\"\n style=\"background-image: url('" | |
| + container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.picture : depth0),1600,{"name":"src","hash":{},"data":data})) | |
| + "')\"\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| return " <p class=\"description\">" | |
| + container.escapeExpression((helpers.userContent || (depth0 && depth0.userContent) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.description : depth0),{"name":"userContent","hash":{},"data":data})) | |
| + "</p>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"iconButtons\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"unselect",{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.mainUserIsMember : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n<div\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.picture : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ">\n <span class=\"name\">" | |
| + alias3(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + "</span>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.description : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_stats",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</div>\n\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:group_actions",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/group_stats", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <li class=\"booksCount count\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"books:",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3(((helper = (helper = helpers.itemsCount || (depth0 != null ? depth0.itemsCount : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"itemsCount","hash":{},"data":data}) : helper))) | |
| + "</li>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<ul class=\"stats\">\n <li class=\"membersCount count\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"members:",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3(((helper = (helper = helpers.membersCount || (depth0 != null ? depth0.membersCount : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"membersCount","hash":{},"data":data}) : helper))) | |
| + "</li>\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.publicDataOnly : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</ul>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/groups_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div id=\"groupsInvitations\"></div>\n<div id=\"groupsList\">\n <span class=\"loading\"></span>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/groups_list", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<ul class=\"groups\"></ul>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/groups_search_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"filter",(depth0 != null ? depth0.groupsSearch : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n<div id=\"groupsList\">\n <span class=\"loading\"></span>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/invite_friends", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "has-message"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing; | |
| return " <p class=\"email-sent\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email_invitation_sent","email",depth0,{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + " " | |
| + container.escapeExpression((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"check-circle",{"name":"icon","hash":{},"data":data})) | |
| + "</p>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return "<form>\n <label for=\"invitations\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"envelope",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"by email address",{"name":"I18n","hash":{},"data":data})) | |
| + "</label>\n <div class=\"invitations\">\n <textarea id=\"invitations\" name=\"invitations\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"emails separated by a comma",{"name":"i18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3(((helper = (helper = helpers.rawEmails || (depth0 != null ? depth0.rawEmails : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"rawEmails","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n </div>\n <div class=\"message " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.message : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n <a id=\"addMessage\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"add a personalized message",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <textarea id=\"message\" name=\"message\" placeholder=\"" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"personalized message",{"name":"i18n","hash":{},"data":data})) | |
| + "...\">" | |
| + alias3(((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"message","hash":{},"data":data}) : helper))) | |
| + "</textarea>\n </div>\n <a id=\"sendInvitations\" class=\"button success bold radius\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"send invitations",{"name":"i18n","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"general:behaviors:success_check","",{"name":"partial","hash":{},"data":data})) | |
| + "\n </a>\n</form>\n<div class=\"output\">\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.emailsInvited : depth0),{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n<div class=\"usersAlreadyThere hidden\">\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Look who was already there! Friend request sent",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <div id=\"usersAlreadyThere\"></div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/nearby_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<section id=\"map\" class=\"map-container\"></section>\n<section id=\"list\"></section>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/nearby_users_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"network:nearby_layout",{"name":"partial","hash":{},"data":data})) | |
| + "\n<section id=\"position-picker\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"map:position_picker_button",{"name":"partial","hash":{},"data":data})) | |
| + "\n</section>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/network_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"custom-tabs-titles\"></div>\n<div class=\"custom-tabs-content\"></div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/network_sub_tabs", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <a id=\"" | |
| + alias4(((helper = (helper = helpers.name || (depth0 != null ? depth0.name : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data}) : helper))) | |
| + "Tab\" href=\"/" | |
| + alias4(((helper = (helper = helpers.path || (depth0 != null ? depth0.path : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"path","hash":{},"data":data}) : helper))) | |
| + "\" class=\"tab " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.active : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias4((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,(depth0 != null ? depth0.title : depth0),{"name":"I18n","hash":{},"data":data})) | |
| + "\n " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.count : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n </a>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| return "active"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return "<span class=\"counter\">" | |
| + container.escapeExpression(((helper = (helper = helpers.count || (depth0 != null ? depth0.count : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"count","hash":{},"data":data}) : helper))) | |
| + "</span>"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},depth0,{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/no_group", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<em>" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.message : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</em>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/searchability", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "hidden"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"searchability\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n <p class=\"warning " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.checked : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"lock",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"only those who get the link or are invited can find this group",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/tabs", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "active"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " <section class=\"users-level-2 level-2\">\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"network:network_sub_tabs",(depth0 != null ? depth0.subTabsData : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| return " <section class=\"groups-level-2 level-2\">\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"network:network_sub_tabs",(depth0 != null ? depth0.subTabsData : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </section>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return "<section class=\"level-1\">\n <a id=\"usersTab\" href=\"/network/users\" class=\"tab " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.users : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"user",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span class=\"label\">" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"users",{"name":"I18n","hash":{},"data":data})) | |
| + "</span>\n <span class=\"counter\">" | |
| + alias3(((helper = (helper = helpers.friendsRequestsCount || (depth0 != null ? depth0.friendsRequestsCount : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"friendsRequestsCount","hash":{},"data":data}) : helper))) | |
| + "</span>\n </a>\n <a id=\"groupsTab\" href=\"/network/groups\" class=\"tab " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.groups : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"group",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span class=\"label\">" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"groups",{"name":"I18n","hash":{},"data":data})) | |
| + "</span>\n <span class=\"counter\">" | |
| + alias3(((helper = (helper = helpers.groupsRequestsCount || (depth0 != null ? depth0.groupsRequestsCount : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"groupsRequestsCount","hash":{},"data":data}) : helper))) | |
| + "</span>\n </a>\n</section>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.users : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.groups : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/templates/users_search_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"filter",(depth0 != null ? depth0.usersSearch : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n<div id=\"usersList\">\n <span class=\"loading\"></span>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/network/views/users_search_layout", function(exports, require, module) { | |
| var UsersList, behaviorsPlugin, updateRoute; | |
| UsersList = require('modules/users/views/users_list'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| updateRoute = require('../lib/update_query_route')('searchUsers'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'usersSearchLayout', | |
| template: require('./templates/users_search_layout'), | |
| regions: { | |
| usersList: '#usersList' | |
| }, | |
| behaviors: { | |
| Loading: {} | |
| }, | |
| events: { | |
| 'keyup #usersSearch': 'searchUserFromEvent' | |
| }, | |
| initialize: function() { | |
| this.collection = app.users.filtered.resetFilters(); | |
| return this.initSearch(); | |
| }, | |
| serializeData: function() { | |
| return { | |
| usersSearch: { | |
| id: 'usersSearch', | |
| placeholder: 'search for users', | |
| value: this.lastQuery | |
| } | |
| }; | |
| }, | |
| onShow: function() { | |
| this.lastQuery = ''; | |
| this.usersList.show(new UsersList({ | |
| collection: this.collection, | |
| stretch: true | |
| })); | |
| return $('.noUser').hide(); | |
| }, | |
| onRender: function() { | |
| return behaviorsPlugin.startLoading.call(this, '#usersList'); | |
| }, | |
| initSearch: function() { | |
| var q; | |
| q = this.options.query.q; | |
| if (_.isNonEmptyString(q)) { | |
| return this.searchUser(q); | |
| } | |
| }, | |
| searchUserFromEvent: function(e) { | |
| var query; | |
| query = e.target.value; | |
| updateRoute(query); | |
| return this.searchUser(query); | |
| }, | |
| searchUser: function(query) { | |
| this.lastQuery = query; | |
| return app.request('users:search', query); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/collections/notifications", function(exports, require, module) { | |
| var createTypedModel, error_, models; | |
| error_ = require('lib/error'); | |
| models = require('../lib/notifications_types').models; | |
| module.exports = Backbone.Collection.extend({ | |
| comparator: function(notif) { | |
| return -notif.get('time'); | |
| }, | |
| unread: function() { | |
| return this.filter(function(model) { | |
| return model.get('status') === 'unread'; | |
| }); | |
| }, | |
| markAsRead: function() { | |
| return this.each(function(model) { | |
| return model.set('status', 'read'); | |
| }); | |
| }, | |
| initialize: function() { | |
| this.toUpdate = []; | |
| return this.batchUpdate = _.debounce(this.update.bind(this), 200); | |
| }, | |
| updateStatus: function(time) { | |
| this.toUpdate.push(time); | |
| return this.batchUpdate(); | |
| }, | |
| update: function() { | |
| var ids; | |
| _.log(this.toUpdate, 'notifs:update'); | |
| ids = this.toUpdate; | |
| this.toUpdate = []; | |
| return $.postJSON(app.API.notifs, { | |
| times: ids | |
| }).fail(console.warn.bind(console)); | |
| }, | |
| addPerType: function(docs) { | |
| return this.add(_.forceArray(docs).map(createTypedModel)); | |
| } | |
| }); | |
| createTypedModel = function(doc) { | |
| var Model, type; | |
| type = doc.type; | |
| Model = models[type]; | |
| if (Model == null) { | |
| throw error_["new"]('unknown notification type', doc); | |
| } | |
| return new Model(doc); | |
| }; | |
| }); | |
| ;require.register("modules/notifications/lib/notifications_types", function(exports, require, module) { | |
| var groupNotificationModel, groupNotificationTemplate, model, template; | |
| template = function(name) { | |
| return require("../views/templates/" + name); | |
| }; | |
| model = function(name) { | |
| return require("../models/" + name); | |
| }; | |
| groupNotificationTemplate = template('group_notification'); | |
| groupNotificationModel = model('group_notification'); | |
| module.exports = { | |
| templates: { | |
| friendAcceptedRequest: template('friend_accepted_request'), | |
| newCommentOnFollowedItem: template('new_comment_on_followed_item'), | |
| userMadeAdmin: groupNotificationTemplate, | |
| groupUpdate: groupNotificationTemplate | |
| }, | |
| models: { | |
| friendAcceptedRequest: model('friend_accepted_request'), | |
| newCommentOnFollowedItem: model('new_comment_on_followed_item'), | |
| userMadeAdmin: groupNotificationModel, | |
| groupUpdate: groupNotificationModel | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/notifications/models/friend_accepted_request", function(exports, require, module) { | |
| var Notification; | |
| Notification = require('./notification'); | |
| module.exports = Notification.extend({ | |
| initSpecific: function() { | |
| return this.grabAttributeModel('user'); | |
| }, | |
| serializeData: function() { | |
| var attrs, ref, ref1; | |
| attrs = this.toJSON(); | |
| attrs.username = (ref = this.user) != null ? ref.get('username') : void 0; | |
| attrs.picture = (ref1 = this.user) != null ? ref1.get('picture') : void 0; | |
| attrs.pathname = "/inventory/" + attrs.username; | |
| return attrs; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/models/group_notification", function(exports, require, module) { | |
| var Notification, escapeExpression, getText, getUpdateValue, texts; | |
| Notification = require('./notification'); | |
| escapeExpression = Handlebars.escapeExpression; | |
| module.exports = Notification.extend({ | |
| initSpecific: function() { | |
| this.grabAttributeModel('group'); | |
| this.grabAttributeModel('user'); | |
| return this.groupId = this.get('data.group'); | |
| }, | |
| serializeData: function() { | |
| var attrs, ref; | |
| attrs = this.toJSON(); | |
| attrs.username = (ref = this.user) != null ? ref.get('username') : void 0; | |
| attrs = getUpdateValue(attrs); | |
| attrs.pathname = "/network/groups/" + this.groupId; | |
| if (this.group != null) { | |
| attrs.picture = this.group.get('picture'); | |
| attrs.groupName = this.group.getEscapedName(); | |
| attrs.text = getText(attrs.type, attrs.data.attribute); | |
| attrs.previousValue; | |
| } | |
| return attrs; | |
| } | |
| }); | |
| getText = function(type, attribute) { | |
| if (attribute != null) { | |
| return texts[type][attribute]; | |
| } else { | |
| return texts[type]; | |
| } | |
| }; | |
| texts = { | |
| userMadeAdmin: 'user_made_admin', | |
| groupUpdate: { | |
| name: 'group_update_name', | |
| description: 'group_update_description' | |
| } | |
| }; | |
| getUpdateValue = function(attrs) { | |
| var newValue, previousValue, ref; | |
| ref = attrs.data, previousValue = ref.previousValue, newValue = ref.newValue; | |
| if (previousValue != null) { | |
| attrs.previousValue = escapeExpression(previousValue); | |
| attrs.newValue = escapeExpression(newValue); | |
| } | |
| return attrs; | |
| }; | |
| }); | |
| ;require.register("modules/notifications/models/new_comment_on_followed_item", function(exports, require, module) { | |
| var Notification; | |
| Notification = require('./notification'); | |
| module.exports = Notification.extend({ | |
| initSpecific: function() { | |
| this.grabAttributeModel('user'); | |
| return this.grabAttributeModel('item'); | |
| }, | |
| serializeData: function() { | |
| var attrs, entity, ref, ref1, ref2, title; | |
| attrs = this.toJSON(); | |
| attrs.username = (ref = this.user) != null ? ref.get('username') : void 0; | |
| attrs.picture = (ref1 = this.user) != null ? ref1.get('picture') : void 0; | |
| if (this.item != null) { | |
| ref2 = this.item.gets('title', 'entity'), title = ref2[0], entity = ref2[1]; | |
| attrs.pathname = "/inventory/" + attrs.username + "/" + entity; | |
| attrs.title = title; | |
| } | |
| return attrs; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/models/notification", function(exports, require, module) { | |
| module.exports = Backbone.NestedModel.extend({ | |
| initialize: function() { | |
| this.on('change:status', this.update); | |
| return this.initSpecific(); | |
| }, | |
| initSpecific: function() {}, | |
| update: function() { | |
| return this.collection.updateStatus(this.get('time')); | |
| }, | |
| isUnread: function() { | |
| return this.get('status') === 'unread'; | |
| }, | |
| grabAttributeModel: function(attribute) { | |
| return app.request('waitForData').then((function(_this) { | |
| return function() { | |
| var id; | |
| id = _this.get("data." + attribute); | |
| return _this.reqGrab("get:" + attribute + ":model", id, attribute); | |
| }; | |
| })(this)); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/notifications", function(exports, require, module) { | |
| var API, Notifications, NotificationsLayout, NotificationsList, getUsersData, getUsersIds; | |
| Notifications = require('./collections/notifications'); | |
| NotificationsList = require('./views/notifications_list'); | |
| NotificationsLayout = require('./views/notifications_layout'); | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) { | |
| var Router; | |
| Router = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'notifications': 'showNotifications' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new Router({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| var addNotifications, notifications; | |
| notifications = app.user.notifications = new Notifications; | |
| addNotifications = function(notifs) { | |
| _.log(notifs, 'notifications:add'); | |
| return getUsersData(notifs).then(_.Full(notifications.addPerType, notifications, notifs))["catch"](_.Error('addNotifications')); | |
| }; | |
| app.reqres.setHandlers({ | |
| 'notifications:add': addNotifications.bind(this) | |
| }); | |
| return app.commands.setHandlers({ | |
| 'show:notifications': function() { | |
| API.showNotifications(); | |
| return app.navigate('notifications'); | |
| } | |
| }); | |
| } | |
| }; | |
| getUsersData = function(notifications) { | |
| var ids; | |
| ids = getUsersIds(notifications); | |
| return app.request('get:users:data', ids); | |
| }; | |
| getUsersIds = function(notifications) { | |
| var ids; | |
| ids = notifications.map(function(notif) { | |
| return notif.data.user; | |
| }); | |
| return _.uniq(ids); | |
| }; | |
| API = { | |
| showNotifications: function() { | |
| if (app.request('require:loggedIn', 'notifications')) { | |
| return app.layout.main.Show(new NotificationsLayout, { | |
| docTitle: _.i18n('notifications') | |
| }); | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/notifications/views/no_notification", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'li', | |
| className: 'notification', | |
| template: require('./templates/no_notification') | |
| }); | |
| }); | |
| ;require.register("modules/notifications/views/notification_li", function(exports, require, module) { | |
| var templates; | |
| templates = require('../lib/notifications_types').templates; | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'li', | |
| className: function() { | |
| var status; | |
| status = this.model.get('status'); | |
| return "notification " + status; | |
| }, | |
| getTemplate: function() { | |
| var notifType, template; | |
| notifType = this.model.get('type'); | |
| template = templates[notifType]; | |
| if (template == null) { | |
| return _.error('notification type unknown'); | |
| } | |
| return template; | |
| }, | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| this.listenTo(this.model, 'change', this.lazyRender); | |
| return this.listenTo(this.model, 'grab', this.lazyRender); | |
| }, | |
| serializeData: function() { | |
| return this.model.serializeData(); | |
| }, | |
| events: { | |
| 'click .friendAcceptedRequest': 'showUserProfile', | |
| 'click .newCommentOnFollowedItem': 'showItem', | |
| 'click .groupNotification': 'showGroupBoard' | |
| }, | |
| showUserProfile: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:user', this.model.user); | |
| } | |
| }, | |
| showItem: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:item:show:from:model', this.model.item); | |
| } | |
| }, | |
| showGroupBoard: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:group:board', this.model.group); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/views/notifications_layout", function(exports, require, module) { | |
| module.exports = Marionette.CompositeView.extend({ | |
| id: 'notificationsLayout', | |
| childView: require('./notification_li'), | |
| emptyView: require('./no_notification'), | |
| template: require('./templates/notifications_layout'), | |
| childViewContainer: 'ul', | |
| initialize: function() { | |
| return this.collection = app.user.notifications; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/views/notifications_list", function(exports, require, module) { | |
| var ListWithCounter, seeAll, seeAllData; | |
| ListWithCounter = require('modules/general/views/menu/list_with_counter'); | |
| seeAll = require('./templates/see_all'); | |
| seeAllData = { | |
| pathname: 'notifications', | |
| text: 'see all' | |
| }; | |
| module.exports = ListWithCounter.extend({ | |
| childView: require('./notification_li'), | |
| emptyView: require('./no_notification'), | |
| initialize: function() { | |
| this.initUpdaters(); | |
| return app.request('waitForData').then(_.preq.Sleep(1000)).then(this.updateSeeAllLink.bind(this)); | |
| }, | |
| serializeData: function() { | |
| return { | |
| icon: 'globe', | |
| label: _.i18n('notifications') | |
| }; | |
| }, | |
| className: 'notifications has-dropdown not-click', | |
| events: { | |
| 'click .listWithCounter': 'markNotificationsAsRead', | |
| 'click .seeAll': 'showAllNotification' | |
| }, | |
| markNotificationsAsRead: function() { | |
| return this.collection.markAsRead(); | |
| }, | |
| count: function() { | |
| return this.collection.unread().length; | |
| }, | |
| filter: function(child, index, collection) { | |
| if (child.isUnread()) { | |
| return true; | |
| } else { | |
| return (-1 < index && index < 5); | |
| } | |
| }, | |
| updateSeeAllLink: function() { | |
| var ref; | |
| if ((((ref = this.ui) != null ? ref.list.append : void 0) != null) && _.isFunction(this.ui.list.append)) { | |
| return this.ui.list.append(seeAll(seeAllData)); | |
| } else { | |
| return setTimeout(this.updateSeeAllLink, 3000); | |
| } | |
| }, | |
| showAllNotification: function() { | |
| return app.execute('show:notifications'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/notifications/views/templates/friend_accepted_request", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"friendAcceptedRequest\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.picture : depth0),48,{"name":"src","hash":{},"data":data})) | |
| + "\">\n <a href=\"" | |
| + alias3(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">\n <span>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"friend_accepted_request",depth0,{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</span><br>\n <span class=\"time\">" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.time : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</span>\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/notifications/views/templates/group_notification", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div class=\"groupNotification " | |
| + alias4(((helper = (helper = helpers.type || (depth0 != null ? depth0.type : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"type","hash":{},"data":data}) : helper))) | |
| + "\">\n <img src=\"" | |
| + alias4((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.picture : depth0),48,{"name":"src","hash":{},"data":data})) | |
| + "\">\n <a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">\n <span>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.text : depth0),depth0,{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</span><br>\n <span class=\"time\">" | |
| + alias4((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.time : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</span>\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/notifications/views/templates/new_comment_on_followed_item", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"newCommentOnFollowedItem\">\n <img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.picture : depth0),48,{"name":"src","hash":{},"data":data})) | |
| + "\">\n <a href=\"" | |
| + alias3(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\">\n <span>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"new_comment_on_followed_item",depth0,{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</span><br>\n <span class=\"time\">" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.time : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</span>\n </a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/notifications/views/templates/no_notification", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"empty\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"no notification",{"name":"i18n","hash":{},"data":data})) | |
| + "</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/notifications/views/templates/notifications_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<h2>" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"notifications",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n<ul></ul>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/notifications/views/templates/see_all", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<li><a href=\"" | |
| + alias3(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"seeAll\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.text : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</a></li>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/redirect", function(exports, require, module) { | |
| var API, CallToConnection, ErrorView, Welcome, initQuerystringActions; | |
| Welcome = require('modules/welcome/views/welcome'); | |
| ErrorView = require('modules/general/views/error'); | |
| CallToConnection = require('modules/general/views/call_to_connection'); | |
| initQuerystringActions = require('modules/general/lib/querystring_actions'); | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) { | |
| var Router; | |
| Router = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| '(home)': 'showHome', | |
| 'welcome': 'showWelcome', | |
| 'me': 'showMainUser', | |
| '*route': 'notFound' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new Router({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| app.reqres.setHandlers({ | |
| 'require:loggedIn': API.requireLoggedIn, | |
| 'show:login:redirect': API.requireLoggedIn | |
| }); | |
| app.commands.setHandlers({ | |
| 'show:home': API.showHome, | |
| 'show:welcome': API.showWelcome, | |
| 'show:error': API.showError, | |
| 'show:403': API.show403, | |
| 'show:404': API.show404, | |
| 'show:offline:error': API.showOfflineError, | |
| 'show:call:to:connection': API.showCallToConnection, | |
| 'show:error:cookieRequired': API.showErrorCookieRequired | |
| }); | |
| return initQuerystringActions(); | |
| } | |
| }; | |
| API = { | |
| requireLoggedIn: function(route) { | |
| if (app.user.loggedIn) { | |
| return true; | |
| } else { | |
| app.execute('show:login'); | |
| route = route.replace(/^\//, ''); | |
| app.execute('prepare:login:redirect', route); | |
| return false; | |
| } | |
| }, | |
| showHome: function() { | |
| if (app.user.loggedIn) { | |
| return app.execute('show:inventory:general'); | |
| } else { | |
| return app.execute('show:welcome'); | |
| } | |
| }, | |
| notFound: function(route) { | |
| if (app.user.loggedIn) { | |
| _.log(route, 'route:notFound', true); | |
| return app.execute('show:404'); | |
| } else { | |
| return this.showWelcome(); | |
| } | |
| }, | |
| showWelcome: function() { | |
| app.layout.main.Show(new Welcome, { | |
| docTitle: _.i18n('Welcome on Inventaire'), | |
| noCompletion: true | |
| }); | |
| return app.navigate('welcome'); | |
| }, | |
| showMainUser: function() { | |
| return app.execute('show:inventory:main:user'); | |
| }, | |
| show403: function() { | |
| return app.execute('show:error', { | |
| header: 403, | |
| message: _.i18n('forbidden') | |
| }); | |
| }, | |
| show404: function() { | |
| return app.execute('show:error', { | |
| header: 404, | |
| message: _.i18n('not found') | |
| }); | |
| }, | |
| showOfflineError: function() { | |
| return app.execute('show:error', { | |
| message: _.i18n("can't reach the server") | |
| }); | |
| }, | |
| showError: function(options) { | |
| _.log(options, 'showError', true); | |
| return app.layout.main.show(new ErrorView(options)); | |
| }, | |
| showCallToConnection: function(message) { | |
| return app.layout.modal.show(new CallToConnection({ | |
| connectionMessage: message | |
| })); | |
| }, | |
| showErrorCookieRequired: function(command) { | |
| return app.execute('show:error', { | |
| icon: 'cog', | |
| header: _.I18n('cookies are disabled'), | |
| message: _.i18n('cookies_are_required'), | |
| redirection: { | |
| text: _.I18n('retry'), | |
| classes: 'dark-grey', | |
| buttonAction: function() { | |
| if (command != null) { | |
| return app.execute(command); | |
| } else { | |
| return location.href = location.href; | |
| } | |
| } | |
| } | |
| }); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/search/search", function(exports, require, module) { | |
| var API, Search, error_; | |
| Search = require('./views/search'); | |
| error_ = require('lib/error'); | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) { | |
| var SearchRouter; | |
| SearchRouter = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'search': 'searchFromQueryString' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new SearchRouter({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| app.commands.setHandlers({ | |
| 'search:global': API.search | |
| }); | |
| return app.reqres.setHandlers({ | |
| 'search:entities': API.searchEntities | |
| }); | |
| } | |
| }; | |
| API = {}; | |
| API.search = function(query) { | |
| var docTitle, searchLayout; | |
| if (!_.isNonEmptyString(query)) { | |
| app.execute('show:add:layout'); | |
| return; | |
| } | |
| app.search = searchLayout = new Search({ | |
| query: _.softDecodeURI(query) | |
| }); | |
| docTitle = (query + " - ") + _.i18n('Search'); | |
| app.layout.main.Show(searchLayout, docTitle); | |
| return app.navigate("search?q=" + query); | |
| }; | |
| API.searchFromQueryString = function(querystring) { | |
| var q; | |
| q = _.parseQuery(querystring).q; | |
| q = q.replace(/\+/g, ' '); | |
| return API.search(q); | |
| }; | |
| }); | |
| ;require.register("modules/search/views/find_by_isbn", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/find_by_isbn'), | |
| className: 'findByIsbn', | |
| serializeData: function() { | |
| return { | |
| findByIsbn: { | |
| nameBase: 'isbn', | |
| field: { | |
| placeholder: _.i18n('ex: 978-2-07-036822-8'), | |
| dotdotdot: '' | |
| }, | |
| button: { | |
| icon: 'search', | |
| classes: 'secondary postfix' | |
| } | |
| }, | |
| isMobile: _.isMobile | |
| }; | |
| }, | |
| events: { | |
| 'click #isbnButton': 'searchByIsbn' | |
| }, | |
| searchByIsbn: function() { | |
| var query; | |
| query = $('input#isbnField').val(); | |
| _.log(query, 'isbn query'); | |
| return app.execute('search:global', query); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/search/views/results_list", function(exports, require, module) { | |
| var AuthorLi, BookLi; | |
| BookLi = require('modules/entities/views/book_li'); | |
| AuthorLi = require('modules/entities/views/author_li'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| template: require('./templates/results_list'), | |
| childViewContainer: '.resultsList', | |
| getChildView: function() { | |
| switch (this.options.type) { | |
| case 'books': | |
| return BookLi; | |
| case 'editions': | |
| return BookLi; | |
| case 'authors': | |
| return AuthorLi; | |
| default: | |
| throw new Error('unvalid type provided: cant choose getChildView'); | |
| } | |
| }, | |
| emptyView: require('modules/inventory/views/no_item'), | |
| serializeData: function() { | |
| return { | |
| type: _.i18n(this.options.type) | |
| }; | |
| }, | |
| collectionEvents: { | |
| 'add': 'hideIfEmpty' | |
| }, | |
| onShow: function() { | |
| return this.hideIfEmpty(); | |
| }, | |
| hideIfEmpty: function() { | |
| if (this.options.hideIfEmpty) { | |
| if (this.collection.length === 0) { | |
| this.$el.addClass('hidden'); | |
| return this._hidden = true; | |
| } else if (this._hidden) { | |
| this.$el.removeClass('hidden'); | |
| return this._hidden = false; | |
| } | |
| } | |
| }, | |
| childViewOptions: { | |
| standalone: false | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/search/views/search", function(exports, require, module) { | |
| var Entities, EntityCreate, FindByIsbn, IsbnEntities, ItemsList, ResultsList, WikidataEntities, addIsbnEntities, addWikidataEntities, behaviorsPlugin, books_, searchInputData, spreadResults, wd_; | |
| ResultsList = require('./results_list'); | |
| Entities = require('modules/entities/collections/entities'); | |
| WikidataEntities = require('modules/entities/collections/wikidata_entities'); | |
| IsbnEntities = require('modules/entities/collections/isbn_entities'); | |
| FindByIsbn = require('./find_by_isbn'); | |
| ItemsList = require('modules/inventory/views/items_list'); | |
| EntityCreate = require('modules/entities/views/entity_create'); | |
| wd_ = require('lib/wikidata'); | |
| books_ = require('lib/books'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| searchInputData = require('modules/general/views/menu/search_input_data'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'searchLayout', | |
| template: require('./templates/search'), | |
| behaviors: { | |
| AlertBox: {}, | |
| LocalSeachBar: {} | |
| }, | |
| serializeData: function() { | |
| return { | |
| search: searchInputData('localSearch', true) | |
| }; | |
| }, | |
| regions: { | |
| inventoryItems: '#inventoryItems', | |
| authors: '#authors', | |
| books: '#books', | |
| editions: '#editions', | |
| findByIsbn: '#findByIsbn', | |
| createEntity: '#create' | |
| }, | |
| ui: { | |
| localSearchField: '#localSearchField' | |
| }, | |
| initialize: function(params) { | |
| _.extend(this, behaviorsPlugin); | |
| return this.query = params.query; | |
| }, | |
| onShow: function() { | |
| app.request('waitForFriendsItems').then(this.showItems.bind(this)); | |
| this.searchEntities(); | |
| if (!books_.isIsbn(this.query)) { | |
| this.showFindByIsbn(); | |
| return this.showEntityCreationForm(); | |
| } else { | |
| return this.showEntityCreationForm(true); | |
| } | |
| }, | |
| updateSearchBar: function() { | |
| return this.ui.localSearchField.val(this.query); | |
| }, | |
| showItems: function() { | |
| var collection; | |
| collection = Items.filtered.resetFilters().filterByText(this.query); | |
| if (collection.length > 0) { | |
| return this.inventoryItems.show(new ItemsList({ | |
| collection: collection, | |
| header: { | |
| text: 'matching books in your network', | |
| classes: 'subheader' | |
| } | |
| })); | |
| } | |
| }, | |
| sameAsPreviousQuery: function() { | |
| var ref, ref1, ref2; | |
| if (((ref = app.results) != null ? ref.search : void 0) === this.query && ((ref1 = app.results) != null ? (ref2 = ref1.books) != null ? ref2.length : void 0 : void 0) > 0) { | |
| this.displayResults(); | |
| this.authors.$el.hide().fadeIn(200); | |
| return true; | |
| } | |
| }, | |
| searchEntities: function() { | |
| var search; | |
| search = this.query; | |
| _.log(search, 'search'); | |
| if (!this.sameAsPreviousQuery()) { | |
| app.results = {}; | |
| _.preq.get(app.API.entities.search(search))["catch"](_.preq.catch404).then((function(_this) { | |
| return function(res) { | |
| _this.authors.empty(); | |
| if (res != null) { | |
| return spreadResults(res); | |
| } else { | |
| } | |
| }; | |
| })(this)).then(this.displayResults.bind(this))["catch"]((function(_this) { | |
| return function(err) { | |
| _this.alert('no item found'); | |
| _this.displayResults(); | |
| return _.error(err, 'searchEntities err'); | |
| }; | |
| })(this)); | |
| return app.execute('show:loader', { | |
| region: this.authors | |
| }); | |
| } | |
| }, | |
| displayResults: function() { | |
| var authors, books, editions, humans, ref; | |
| ref = app.results, humans = ref.humans, authors = ref.authors, books = ref.books, editions = ref.editions; | |
| this.showAuthors(authors, humans); | |
| this.showBooks(books); | |
| return this.showEditions(editions); | |
| }, | |
| showAuthors: function(authors, humans) { | |
| var authorsList; | |
| if ((authors != null ? authors.length : void 0) === 0) { | |
| authors = humans; | |
| } | |
| if ((authors != null ? authors.length : void 0) > 0) { | |
| authorsList = new ResultsList({ | |
| collection: authors, | |
| type: 'authors' | |
| }); | |
| return this.authors.show(authorsList); | |
| } | |
| }, | |
| showBooks: function(books) { | |
| var booksList; | |
| if ((books != null ? books.length : void 0) > 0) { | |
| booksList = new ResultsList({ | |
| collection: books, | |
| type: 'books', | |
| entity: 'Q571' | |
| }); | |
| return this.books.show(booksList); | |
| } | |
| }, | |
| showEditions: function(editions) { | |
| var editionsList; | |
| if ((editions != null ? editions.length : void 0) > 0) { | |
| editionsList = new ResultsList({ | |
| collection: editions, | |
| type: 'editions', | |
| entity: 'Q17902573' | |
| }); | |
| return this.editions.show(editionsList); | |
| } | |
| }, | |
| showFindByIsbn: function() { | |
| return this.findByIsbn.show(new FindByIsbn); | |
| }, | |
| showEntityCreationForm: function(queryIsIsbn) { | |
| var options; | |
| options = { | |
| data: this.query | |
| }; | |
| if (!queryIsIsbn) { | |
| options.secondChoice = true; | |
| } | |
| this.createEntity.show(new EntityCreate(options)); | |
| return this.$el.find('h3.create').show(); | |
| } | |
| }); | |
| spreadResults = function(res) { | |
| var google, ol, wd; | |
| _.log(res, 'res at spreadResults'); | |
| app.results = { | |
| humans: new Entities, | |
| authors: new Entities, | |
| books: new Entities, | |
| editions: new Entities, | |
| search: res.search | |
| }; | |
| wd = res.wd, ol = res.ol, google = res.google; | |
| if (wd != null) { | |
| addWikidataEntities(wd.items); | |
| } | |
| if (ol != null) { | |
| addIsbnEntities(ol.items); | |
| } | |
| if (google != null) { | |
| return addIsbnEntities(google.items); | |
| } | |
| }; | |
| addWikidataEntities = function(resultsArray) { | |
| var claims, i, len, model, ref, results, wdEntities; | |
| wdEntities = new WikidataEntities(resultsArray); | |
| ref = wdEntities.models; | |
| results = []; | |
| for (i = 0, len = ref.length; i < len; i++) { | |
| model = ref[i]; | |
| claims = model.get('claims'); | |
| if (_.isntEmpty(claims.P31)) { | |
| if (wd_.isBook(claims.P31)) { | |
| app.results.books.add(model); | |
| } | |
| if (wd_.isHuman(claims.P31)) { | |
| app.results.humans.add(model); | |
| } | |
| } | |
| if (_.isntEmpty(claims.P106)) { | |
| if (wd_.isAuthor(claims.P106)) { | |
| results.push(app.results.authors.add(model)); | |
| } else { | |
| results.push(void 0); | |
| } | |
| } else { | |
| results.push(void 0); | |
| } | |
| } | |
| return results; | |
| }; | |
| addIsbnEntities = function(resultsArray) { | |
| var editions; | |
| editions = new IsbnEntities(resultsArray); | |
| return app.results.editions.add(editions.models); | |
| }; | |
| }); | |
| ;require.register("modules/search/views/templates/find_by_isbn", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " <a id=\"scanner\" href=\"" | |
| + container.escapeExpression(((helper = (helper = helpers.scanner || (depth0 != null ? depth0.scanner : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"scanner","hash":{},"data":data}) : helper))) | |
| + "\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h4>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"find_by_isbn_title",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n" | |
| + alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.findByIsbn : depth0),{"name":"input","hash":{},"data":data})) | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.isMobile : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/search/views/templates/results_list", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " <h3 class='subheader'>" | |
| + container.escapeExpression(((helper = (helper = helpers.type || (depth0 != null ? depth0.type : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"type","hash":{},"data":data}) : helper))) | |
| + "</h3>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.type : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<ul class=\"resultsList jk\"></ul>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/search/views/templates/search", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.search : depth0),{"name":"input","hash":{},"data":data})) | |
| + "\n<section id=\"results\">\n <div id=\"inventoryItems\"></div>\n <div id=\"authors\"></div>\n <div id=\"books\"></div>\n <div id=\"editions\"></div>\n</section>\n\n<section id=\"createGroup\">\n <h3 class=\"create\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"couldn't find your book?",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </h3>\n <div id=\"findByIsbn\"></div>\n <div id=\"create\"></div>\n</section>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/settings/lib/periodicity_days", function(exports, require, module) { | |
| var days, i, num; | |
| days = []; | |
| for (num = i = 1; i <= 180; num = ++i) { | |
| if (num <= 30 || num % 10 === 0) { | |
| days.push({ | |
| num: num | |
| }); | |
| } | |
| } | |
| module.exports = function(selectedDay) { | |
| return days.map(function(el) { | |
| if (el.num === selectedDay) { | |
| el.selected = true; | |
| } | |
| return el; | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/settings/settings", function(exports, require, module) { | |
| var API, SettingsLayout, setHandlers, showSettings; | |
| SettingsLayout = require('./views/settings'); | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) { | |
| var SettingsRouter; | |
| SettingsRouter = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'settings(/profile)(/)': 'showProfileSettings', | |
| 'settings/notifications(/)': 'showNotificationsSettings', | |
| 'settings/labs(/)': 'showLabsSettings' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new SettingsRouter({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| return setHandlers(); | |
| } | |
| }; | |
| API = { | |
| showProfileSettings: function() { | |
| return showSettings('profile'); | |
| }, | |
| showNotificationsSettings: function() { | |
| return showSettings('notifications'); | |
| }, | |
| showLabsSettings: function() { | |
| return showSettings('labs'); | |
| } | |
| }; | |
| showSettings = function(tab) { | |
| var options, title; | |
| if (app.request('require:loggedIn', "settings/" + tab)) { | |
| title = _.I18n('settings'); | |
| options = { | |
| model: app.user, | |
| tab: tab | |
| }; | |
| return app.layout.main.Show(new SettingsLayout(options), title); | |
| } | |
| }; | |
| setHandlers = function() { | |
| return app.commands.setHandlers({ | |
| 'show:settings:profile': API.showProfileSettings, | |
| 'show:settings:notifications': API.showNotificationsSettings, | |
| 'show:settings:labs': API.showLabsSettings | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/settings/views/labs_settings", function(exports, require, module) { | |
| var behaviorsPlugin, cleaningDb, getRoot, putItems; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/labs_settings'), | |
| className: 'labsSettings', | |
| behaviors: { | |
| AlertBox: {}, | |
| SuccessCheck: {}, | |
| Loading: {} | |
| }, | |
| events: { | |
| 'click a#jsonInventoryExport': 'jsonInventoryExport', | |
| 'click a#pouchdbButton': 'pouchdbInventoryExport' | |
| }, | |
| ui: { | |
| url: '#pouchdbField' | |
| }, | |
| initialize: function() { | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| serializeData: function() { | |
| return { | |
| pouchdb: this.pouchDbData() | |
| }; | |
| }, | |
| pouchDbData: function() { | |
| return { | |
| nameBase: 'pouchdb', | |
| field: { | |
| placeholder: _.i18n('enter the url of your CouchDB database'), | |
| type: 'url' | |
| }, | |
| button: { | |
| text: _.i18n('replicate'), | |
| classes: 'dark-grey postfix' | |
| } | |
| }; | |
| }, | |
| jsonInventoryExport: function() { | |
| var date, name, userInventory, username; | |
| userInventory = Items.personal.toJSON(); | |
| username = app.user.get('username'); | |
| date = new Date().toLocaleDateString(); | |
| name = "inventaire.io-" + username + "-" + date + ".json"; | |
| return _.openJsonWindow(userInventory, name); | |
| }, | |
| pouchdbInventoryExport: function() { | |
| var url; | |
| url = this.validUrl(); | |
| if (url != null) { | |
| return this.validCouchDB(url).then(this.triggerReplication.bind(this)); | |
| } | |
| }, | |
| triggerReplication: function() { | |
| _.log('couchdb ok'); | |
| this.startLoading('#pouchdbButton'); | |
| return this.importPouchDbScript().then(this.replicateInventory.bind(this)); | |
| }, | |
| importPouchDbScript: function() { | |
| _.log('Importing PouchDB'); | |
| return _.preq.getScript(app.API.scripts.pouchdb)["catch"](_.Error('failed to import PouchDB')); | |
| }, | |
| replicateInventory: function() { | |
| var invDb, url; | |
| _.log('Start replication process'); | |
| if (window.PouchDB != null) { | |
| _.log('Found PouchDB'); | |
| url = this.validUrl(); | |
| if (url != null) { | |
| invDb = new PouchDB('inv'); | |
| return putItems(invDb).then(this.replicateDb.bind(this, invDb, url)).then(function() { | |
| return cleaningDb(invDb); | |
| }); | |
| } | |
| } | |
| }, | |
| validUrl: function() { | |
| var url; | |
| url = this.ui.url.val(); | |
| if (!_.isUrl(url)) { | |
| return this.alert('invalid url'); | |
| } else { | |
| return url; | |
| } | |
| }, | |
| validCouchDB: function(url) { | |
| var root; | |
| root = getRoot(url); | |
| if (root != null) { | |
| return $.getJSON(root).then((function(_this) { | |
| return function(res) { | |
| if (res.couchdb != null) { | |
| return 'ok'; | |
| } else { | |
| return _this.alert("the server doesn't answer as a CouchDB. You might need to enable CORS on your CouchDB"); | |
| } | |
| }; | |
| })(this)).fail((function(_this) { | |
| return function(err) { | |
| _.error(err, err.statusText); | |
| return _this.alert("the server doesn't answer as expected."); | |
| }; | |
| })(this)); | |
| } else { | |
| return this.alert("it doesn't seem to be valid CouchDB url"); | |
| } | |
| }, | |
| replicateDb: function(db, url) { | |
| _.log('Replicate to PouchDB!'); | |
| return db.replicate.to(url).then(this.Check('replicateDb success'))["catch"](this.Fail('replicateDb success'))["finally"](this.stopLoading.bind(this)); | |
| } | |
| }); | |
| putItems = function(db) { | |
| var docs; | |
| docs = Items.personal.toJSON(); | |
| _.log(docs, 'transfer items to PouchDB'); | |
| return db.bulkDocs(docs); | |
| }; | |
| cleaningDb = function(db) { | |
| return db.destroy().then(_.Log('cleaning DB'))["catch"](_.Error('cleaning DB err')); | |
| }; | |
| getRoot = function(url) { | |
| var root; | |
| root = url != null ? url.split('/').slice(0, -1).join('/') : void 0; | |
| if (_.isUrl(root)) { | |
| return root; | |
| } else { | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/settings/views/notifications_settings", function(exports, require, module) { | |
| var defaultPeriodicity, getPeriodicityDays, notificationsList; | |
| notificationsList = sharedLib('notifications_settings_list'); | |
| getPeriodicityDays = require('../lib/periodicity_days'); | |
| defaultPeriodicity = 20; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/notifications_settings'), | |
| className: 'notificationsSettings', | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| return this.listenTo(app.user, 'change:settings', this.lazyRender); | |
| }, | |
| behaviors: { | |
| SuccessCheck: {} | |
| }, | |
| serializeData: function() { | |
| var notifications, summaryPeriodicity; | |
| notifications = app.user.get('settings.notifications'); | |
| summaryPeriodicity = app.user.get('summaryPeriodicity') || defaultPeriodicity; | |
| return _.extend(this.getNotificationsData(notifications), { | |
| warning: 'global_email_toggle_warning', | |
| showWarning: !notifications.global, | |
| showPeriodicity: !notifications.inventories_activity_summary, | |
| days: getPeriodicityDays(summaryPeriodicity) | |
| }); | |
| }, | |
| getNotificationsData: function(notifications) { | |
| var data, i, len, notif; | |
| data = {}; | |
| for (i = 0, len = notificationsList.length; i < len; i++) { | |
| notif = notificationsList[i]; | |
| data[notif] = { | |
| id: notif, | |
| checked: notifications[notif] !== false, | |
| label: notif + "_notification" | |
| }; | |
| } | |
| return data; | |
| }, | |
| ui: { | |
| global: '#global', | |
| warning: '.warning', | |
| globalFog: '.rest-fog', | |
| periodicityFog: '.periodicity-fog' | |
| }, | |
| events: { | |
| 'change .toggler-input': 'toggleSetting', | |
| 'change #periodicityPicker': 'updatePeriodicity' | |
| }, | |
| toggleSetting: function(e) { | |
| var checked, id, ref; | |
| ref = e.currentTarget, id = ref.id, checked = ref.checked; | |
| return this.updateSetting(id, checked); | |
| }, | |
| updateSetting: function(id, value) { | |
| app.request('user:update', { | |
| attribute: "settings.notifications." + id, | |
| value: value, | |
| defaultPreviousValue: true | |
| }); | |
| if (id === 'global') { | |
| this.toggleWarning(); | |
| } | |
| if (id === 'inventories_activity_summary') { | |
| return this.togglePeriodicity(); | |
| } | |
| }, | |
| toggleWarning: function() { | |
| this.ui.warning.slideToggle(200); | |
| return this.ui.globalFog.fadeToggle(200); | |
| }, | |
| togglePeriodicity: function() { | |
| return this.ui.periodicityFog.fadeToggle(200); | |
| }, | |
| updatePeriodicity: function(e) { | |
| return app.request('user:update', { | |
| attribute: 'summaryPeriodicity', | |
| value: e.target.value, | |
| selector: '#periodicityPicker' | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/settings/views/profile_settings", function(exports, require, module) { | |
| var behaviorsPlugin, email_, forms_, password_, pickerData, sendDeletionFeedback, testAttribute, username_; | |
| username_ = require('modules/user/lib/username_tests'); | |
| email_ = require('modules/user/lib/email_tests'); | |
| password_ = require('modules/user/lib/password_tests'); | |
| forms_ = require('modules/general/lib/forms'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/profile_settings'), | |
| className: 'profileSettings', | |
| behaviors: { | |
| AlertBox: {}, | |
| SuccessCheck: {}, | |
| Loading: {}, | |
| ConfirmationModal: {}, | |
| TogglePassword: {} | |
| }, | |
| ui: { | |
| username: '#usernameField', | |
| email: '#emailField', | |
| currentPassword: '#currentPassword', | |
| newPassword: '#newPassword', | |
| passwords: '.password', | |
| passwordUpdater: '#passwordUpdater', | |
| languagePicker: '#languagePicker' | |
| }, | |
| initialize: function() { | |
| _.extend(this, behaviorsPlugin); | |
| this.listenTo(this.model, 'change:picture', this.render); | |
| this.listenTo(this.model, 'change:position', this.render); | |
| return this.listenTo(app.vent, 'i18n:reset', _.debounce(this.render.bind(this), 1000)); | |
| }, | |
| onShow: function() { | |
| return app.execute('foundation:reload'); | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.toJSON(); | |
| return _.extend(attrs, { | |
| usernamePicker: this.usernamePickerData(), | |
| emailPicker: this.emailPickerData(), | |
| languages: this.languagesData(), | |
| changePicture: { | |
| classes: 'max-large-profilePic' | |
| }, | |
| localCreationStrategy: attrs.creationStrategy === 'local', | |
| hasPassword: attrs.creationStrategy === 'local' || attrs.hasPassword, | |
| hasPosition: this.model.hasPosition(), | |
| position: this.model.getCoords() | |
| }); | |
| }, | |
| usernamePickerData: function() { | |
| return pickerData(this.model, 'username'); | |
| }, | |
| emailPickerData: function() { | |
| return pickerData(this.model, 'email'); | |
| }, | |
| languagesData: function() { | |
| var currentLanguages, languages, ref; | |
| languages = _.deepClone(window.wdLang.byCode); | |
| currentLanguages = _.shortLang(this.model.get('language')); | |
| if ((ref = languages[currentLanguages]) != null) { | |
| ref.selected = true; | |
| } | |
| return languages; | |
| }, | |
| events: { | |
| 'click a#changePicture': 'changePicture', | |
| 'click a#usernameButton': 'updateUsername', | |
| 'click a#emailButton': 'updateEmail', | |
| 'click a#emailConfirmationRequest': 'emailConfirmationRequest', | |
| 'change select#languagePicker': 'changeLanguage', | |
| 'click a#updatePassword': 'updatePassword', | |
| 'click #forgotPassword': function() { | |
| return app.execute('show:forgot:password'); | |
| }, | |
| 'click #deleteAccount': 'askDeleteAccountConfirmation', | |
| 'click #showPositionPicker': function() { | |
| return app.execute('show:position:picker:main:user'); | |
| } | |
| }, | |
| updateUsername: function() { | |
| var username; | |
| username = this.ui.username.val(); | |
| return _.preq.start.then(this.testUsername.bind(this, username)).then((function(_this) { | |
| return function() { | |
| if (_this.usernameCaseChange(username)) { | |
| } else { | |
| return username_.verifyUsername(username, '#usernameField'); | |
| } | |
| }; | |
| })(this)).then(_.Full(this.confirmUsernameChange, this, username))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| usernameCaseChange: function(username) { | |
| return username.toLowerCase() === this.model.get('username').toLowerCase(); | |
| }, | |
| testUsername: function(username) { | |
| return testAttribute('username', username, username_); | |
| }, | |
| confirmUsernameChange: function(username) { | |
| var action; | |
| action = this.updateUserUsername.bind(this, username); | |
| return this.askConfirmation(action, { | |
| requestedUsername: username, | |
| currentUsername: app.user.get('username'), | |
| usernameCaseChange: this.usernameCaseChange(username), | |
| model: this.model | |
| }); | |
| }, | |
| askConfirmation: function(action, args) { | |
| var usernameCaseChange; | |
| usernameCaseChange = args.usernameCaseChange; | |
| return this.$el.trigger('askConfirmation', { | |
| confirmationText: _.i18n('username_change_confirmation', args), | |
| warningText: !usernameCaseChange ? _.i18n('username_change_warning') : void 0, | |
| action: action, | |
| selector: '#usernameGroup' | |
| }); | |
| }, | |
| updateUserUsername: function(username) { | |
| return app.request('user:update', { | |
| attribute: 'username', | |
| value: username, | |
| selector: '#usernameButton' | |
| }); | |
| }, | |
| updateEmail: function() { | |
| var email; | |
| email = this.ui.email.val(); | |
| return _.preq.start.then(this.testEmail.bind(this, email)).then(this.startLoading.bind(this, '#emailButton')).then(email_.verifyAvailability.bind(null, email, "#emailField")).then(email_.verifyExistance.bind(email_, email, '#emailField')).then(this.sendEmailRequest.bind(this, email)).then(this.showConfirmationEmailSuccessMessage.bind(this))["catch"](forms_.catchAlert.bind(null, this))["finally"](this.hardStopLoading.bind(this)); | |
| }, | |
| testEmail: function(email) { | |
| return testAttribute('email', email, email_); | |
| }, | |
| sendEmailRequest: function(email) { | |
| return _.preq.post(app.API.auth.emailAvailability, { | |
| email: email | |
| }).then(_.property('email')).then(this.sendEmailChangeRequest); | |
| }, | |
| sendEmailChangeRequest: function(email) { | |
| return app.request('user:update', { | |
| attribute: 'email', | |
| value: email, | |
| selector: '#emailField' | |
| }); | |
| }, | |
| hardStopLoading: function() { | |
| return this.$el.find('.loading').empty(); | |
| }, | |
| emailConfirmationRequest: function() { | |
| $('#notValidEmail').fadeOut(); | |
| return app.request('email:confirmation:request').then(this.showConfirmationEmailSuccessMessage); | |
| }, | |
| showConfirmationEmailSuccessMessage: function() { | |
| $('#confirmationEmailSent').fadeIn(); | |
| return $('#emailButton').once('click', this.hideConfirmationEmailSent); | |
| }, | |
| hideConfirmationEmailSent: function() { | |
| return $('#confirmationEmailSent').fadeOut(); | |
| }, | |
| updatePassword: function() { | |
| var currentPassword, newPassword; | |
| currentPassword = this.ui.currentPassword.val(); | |
| newPassword = this.ui.newPassword.val(); | |
| return _.preq.start.then(function() { | |
| return password_.pass(currentPassword, '#currentPasswordAlert'); | |
| }).then(function() { | |
| return password_.pass(newPassword, '#newPasswordAlert'); | |
| }).then(this.startLoading.bind(this, '#updatePassword')).then(this.confirmCurrentPassword.bind(this, currentPassword)).then(this.updateUserPassword.bind(this, currentPassword, newPassword)).then(this.passwordSuccessCheck.bind(this))["catch"](forms_.catchAlert.bind(null, this))["finally"](this.stopLoading.bind(this)); | |
| }, | |
| confirmCurrentPassword: function(currentPassword) { | |
| return app.request('password:confirmation', currentPassword)["catch"](function(err) { | |
| if (err.status === 401) { | |
| err = new Error('wrong password'); | |
| err.selector = '#currentPasswordAlert'; | |
| throw err; | |
| } else { | |
| throw err; | |
| } | |
| }); | |
| }, | |
| updateUserPassword: function(currentPassword, newPassword) { | |
| return app.request('password:update', currentPassword, newPassword); | |
| }, | |
| passwordSuccessCheck: function(password) { | |
| this.ui.passwords.val(''); | |
| return this.ui.passwordUpdater.trigger('check'); | |
| }, | |
| passwordFail: function(password) { | |
| return this.ui.passwordUpdater.trigger('fail'); | |
| }, | |
| changeLanguage: function(e) { | |
| return app.request('user:update', { | |
| attribute: 'language', | |
| value: e.target.value, | |
| selector: '#languagePicker' | |
| }); | |
| }, | |
| changePicture: require('modules/user/lib/change_user_picture'), | |
| askDeleteAccountConfirmation: function() { | |
| var args; | |
| args = { | |
| username: this.model.get('username') | |
| }; | |
| return this.$el.trigger('askConfirmation', { | |
| confirmationText: _.i18n('delete_account_confirmation', args), | |
| warningText: _.i18n('delete_account_warning'), | |
| action: this.model.deleteAccount.bind(this.model), | |
| selector: '#usernameGroup', | |
| formAction: sendDeletionFeedback, | |
| formLabel: "that would really help us if you could say a few words about why you're leaving:", | |
| formPlaceholder: "our love wasn't possible because", | |
| yes: 'delete your account', | |
| no: 'cancel' | |
| }); | |
| } | |
| }); | |
| sendDeletionFeedback = function(message) { | |
| return _.preq.post(app.API.feedback, { | |
| subject: '[account deletion]', | |
| message: message | |
| }); | |
| }; | |
| testAttribute = function(attribute, value, validator_) { | |
| var err, selector; | |
| selector = "#" + attribute + "Field"; | |
| if (value === app.user.get(attribute)) { | |
| err = new Error("that's already your " + attribute); | |
| err.selector = selector; | |
| throw err; | |
| } else { | |
| validator_.pass(value, selector); | |
| return value; | |
| } | |
| }; | |
| pickerData = function(model, attribute) { | |
| return { | |
| nameBase: attribute, | |
| special: true, | |
| field: { | |
| value: model.get(attribute) | |
| }, | |
| button: { | |
| text: _.i18n("change " + attribute), | |
| classes: 'grey postfix' | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/settings/views/settings", function(exports, require, module) { | |
| var LabsSettings, NotificationsSettings, ProfileSettings, updateDocTitle; | |
| ProfileSettings = require('./profile_settings'); | |
| NotificationsSettings = require('./notifications_settings'); | |
| LabsSettings = require('./labs_settings'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'settings', | |
| template: require('./templates/settings'), | |
| regions: { | |
| tabsContent: '.custom-tabs-content' | |
| }, | |
| ui: { | |
| tabsTitles: '.custom-tabs-titles', | |
| profileTitle: '#profile', | |
| notificationsTitle: '#notifications', | |
| labsTitle: '#labs' | |
| }, | |
| onShow: function() { | |
| var fn, tab; | |
| tab = this.options.tab; | |
| switch (tab) { | |
| case 'profile': | |
| fn = this.showProfileSettings; | |
| break; | |
| case 'notifications': | |
| fn = this.showNotificationsSettings; | |
| break; | |
| case 'labs': | |
| fn = this.showLabsSettings; | |
| break; | |
| default: | |
| _.error('unknown tab requested'); | |
| } | |
| return app.request('waitForUserData').then(fn.bind(this)); | |
| }, | |
| events: { | |
| 'click #profile': 'showProfileSettings', | |
| 'click #notifications': 'showNotificationsSettings', | |
| 'click #labs': 'showLabsSettings' | |
| }, | |
| showProfileSettings: function() { | |
| this.tabsContent.show(new ProfileSettings({ | |
| model: this.model | |
| })); | |
| return this.tabUpdate('profile'); | |
| }, | |
| showNotificationsSettings: function() { | |
| this.tabsContent.show(new NotificationsSettings({ | |
| model: this.model | |
| })); | |
| return this.tabUpdate('notifications'); | |
| }, | |
| showLabsSettings: function() { | |
| this.tabsContent.show(new LabsSettings({ | |
| model: this.model | |
| })); | |
| return this.tabUpdate('labs'); | |
| }, | |
| tabUpdate: function(tab) { | |
| this.setActiveTab(tab); | |
| updateDocTitle(tab); | |
| return app.navigate("settings/" + tab); | |
| }, | |
| setActiveTab: function(name) { | |
| var tab; | |
| tab = name + "Title"; | |
| this.ui.tabsTitles.find('a').removeClass('active'); | |
| return this.ui[tab].addClass('active'); | |
| } | |
| }); | |
| updateDocTitle = function(tab) { | |
| var settings; | |
| tab = _.I18n(tab); | |
| settings = _.I18n('settings'); | |
| return app.execute('metadata:update:title', tab + " - " + settings); | |
| }; | |
| }); | |
| ;require.register("modules/settings/views/templates/email_me_when", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<span class=\"email-me\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"email me when",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/settings/views/templates/labs_settings", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<p class=\"intro\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"quote-left",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"labs_intro",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <br>\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"contribute_with_code_or_ideas",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "!\n</p>\n\n<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"data exports",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"data_export_intro",{"name":"i18n","hash":{},"data":data})) | |
| + "\n\n<h4 class=\"subheader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"personal inventory data",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n\n<div class=\"panel\">\n <h5>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"pouchdb",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"PouchDB export",{"name":"i18n","hash":{},"data":data})) | |
| + ":</h5>\n <p class=\"intro\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Replicate your data to a CouchDB instance you control",{"name":"i18n","hash":{},"data":data})) | |
| + "!\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"It's just a backup for the moment, it won't stay in sync",{"name":"i18n","hash":{},"data":data})) | |
| + ".\n <br>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"question-circle",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18nLink || (depth0 && depth0.i18nLink) || alias2).call(alias1,"what is PouchDB?","http://pouchdb.com/",{"name":"i18nLink","hash":{},"data":data})) | |
| + "\n </p>\n " | |
| + alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.pouchdb : depth0),"check",{"name":"input","hash":{},"data":data})) | |
| + "\n</div>\n\n<div class=\"panel\">\n <h5>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"download",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"downloads",{"name":"I18n","hash":{},"data":data})) | |
| + ":</h5>\n <a id=\"jsonInventoryExport\" class=\"button grey\">JSON</a>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/settings/views/templates/notifications_settings", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "shown"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <option value=\"" | |
| + alias4(((helper = (helper = helpers.num || (depth0 != null ? depth0.num : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"num","hash":{},"data":data}) : helper))) | |
| + "\" " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.selected : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ">" | |
| + alias4(((helper = (helper = helpers.num || (depth0 != null ? depth0.num : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"num","hash":{},"data":data}) : helper))) | |
| + "</option>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| return "selected"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"global\">\n <h3 class=\"first\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"global",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.global : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <p class=\"warning " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.showWarning : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"warning",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.warning : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n <hr>\n</div>\n\n<div class=\"rest\">\n <div class=\"rest-fog local-fog " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.showWarning : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\"></div>\n <div class=\"news\">\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"news",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.inventories_activity_summary : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <div class=\"summary-periodicity checkWrapper\">\n <div class=\"periodicity-fog local-fog " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.showPeriodicity : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\"></div>\n <div class=\"row\">\n <span>" | |
| + ((stack1 = (helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"activity_summary_periodicity_tip",{"name":"I18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</span>\n <select id=\"periodicityPicker\" name=\"periodicity\">\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.days : depth0),{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </select>\n </div>\n <span class=\"check\"></span>\n </div>\n </div>\n <div class=\"friends\">\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"friends",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"settings:email_me_when",{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.friendship_request : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.friend_accepted_request : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n </div>\n\n <div class=\"groups\">\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"groups",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"settings:email_me_when",{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.group_invite : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.group_acceptRequest : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n </div>\n\n <div class=\"exchanges\">\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"exchanges",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"settings:email_me_when",{"name":"partial","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.your_item_was_requested : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.update_on_your_item : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"toggler",(depth0 != null ? depth0.update_on_item_you_requested : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n <hr>\n </div>\n\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/settings/views/templates/password_update_input", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression, alias4="function"; | |
| return "<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"password",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<form id=\"passwordUpdater\">\n\n <span class=\"note\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"current password",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <div class=\"passwordGroup\">\n <input type=\"password\" id=\"currentPassword\" class=\"password enterClick radius-left\" " | |
| + alias3(((helper = (helper = helpers.disableAuto || (depth0 != null ? depth0.disableAuto : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"disableAuto","hash":{},"data":data}) : helper))) | |
| + ">\n <a class=\"showPassword\" class=\"radius-right\">\n <span class=\"displayed\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"show",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <span class=\"substitute\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"hide",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </a>\n </div>\n <div>\n <div id=\"currentPasswordAlert\"></div>\n </div>\n <div class=\"forgotPassword\">\n <a id=\"forgotPassword\" class=\"link\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"forgot your password?",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n\n <span class=\"note\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"new password",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <div class=\"passwordGroup\">\n <input type=\"password\" id=\"newPassword\" class=\"password enterClick radius-left\" " | |
| + alias3(((helper = (helper = helpers.disableAuto || (depth0 != null ? depth0.disableAuto : depth0)) != null ? helper : alias2),(typeof helper === alias4 ? helper.call(alias1,{"name":"disableAuto","hash":{},"data":data}) : helper))) | |
| + ">\n <a class=\"showPassword\" class=\"radius-right\">\n <span class=\"displayed\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"show",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <span class=\"substitute\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"hide",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </a>\n </div>\n <div>\n <div id=\"newPasswordAlert\"></div>\n </div>\n\n <a id=\"updatePassword\" class=\"button grey postfix\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"change password",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n</form>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/settings/views/templates/profile_settings", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <hr>\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n\n <p class=\"note\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email will not be publicly displayed.",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n " | |
| + alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.emailPicker : depth0),{"name":"input","hash":{},"data":data})) | |
| + "\n\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.validEmail : depth0),{"name":"unless","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n <div id=\"confirmationEmailSent\" class=\"hidden successMessageBox\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"check",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"new_confirmation_email",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n </div>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div id=\"notValidEmail\" class=\"alertMessageBox\">\n <span class=\"alert\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"warning",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email_wasnt_verified",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n </span>\n <a id=\"emailConfirmationRequest\" class=\"button dark-grey radius\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email_confirmation_error_button",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </div>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| return " <hr>\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"settings:password_update_input",depth0,"check",{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression, alias2=container.lambda; | |
| return " " | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"you have a position set",{"name":"i18n","hash":{},"data":data})) | |
| + "<br>\n <span class=\"coordinates\">" | |
| + alias1(alias2(((stack1 = (depth0 != null ? depth0.position : depth0)) != null ? stack1.lat : stack1), depth0)) | |
| + ", " | |
| + alias1(alias2(((stack1 = (depth0 != null ? depth0.position : depth0)) != null ? stack1.lng : stack1), depth0)) | |
| + "</span>\n"; | |
| },"8":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"your positon isn't set yet",{"name":"i18n","hash":{},"data":data})) | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h3 class=\"first\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"profile pic",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"general:behaviors:change_picture",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n\n<hr>\n<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"language",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"user:language_picker",depth0,"check",{"name":"partial","hash":{},"data":data})) | |
| + "\n\n<hr>\n<h3 class=\"with-tip\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"username",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n" | |
| + alias3((helpers.tip || (depth0 && depth0.tip) || alias2).call(alias1,"username_tip","right",{"name":"tip","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.usernamePicker : depth0),{"name":"input","hash":{},"data":data})) | |
| + "\n\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.localCreationStrategy : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.hasPassword : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\n<hr>\n<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"geolocation",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n<p class=\"position-status\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.hasPosition : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.program(8, data, 0),"data":data})) != null ? stack1 : "") | |
| + "</p>\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"map:position_picker_button",{"name":"partial","hash":{},"data":data})) | |
| + "\n\n<hr>\n<h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"danger zone",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n\n<div class=\"deleteAccount\">\n <a id=\"deleteAccount\" class=\"dangerous-button\">" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"delete your account",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/settings/views/templates/settings", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"custom-column\">\n <div class=\"custom-tabs\">\n <ul class=\"custom-tabs-titles\">\n <a id=\"profile\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"sliders",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"edit profile",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n <a id=\"notifications\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"envelope",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"notifications",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n <a id=\"labs\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"flask",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"labs",{"name":"I18n","hash":{},"data":data})) | |
| + "</a>\n </ul>\n <div class=\"custom-tabs-content\"></div>\n </div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/collections/timeline", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| comparator: function(model) { | |
| return model.get('created') || model.get('timestamp'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/collections/transactions", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| model: require('../models/transaction'), | |
| comparator: function(transaction) { | |
| return -transaction.get('created'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/helpers", function(exports, require, module) { | |
| var API, Message, addMessageToTimeline, initLateHelpers, poster_; | |
| Message = require('./models/message'); | |
| poster_ = require('lib/poster'); | |
| module.exports = function() { | |
| app.reqres.setHandlers({ | |
| 'transactions:add': API.addTransaction, | |
| 'get:transaction:byId': API.getTransaction, | |
| 'transaction:post:message': API.postMessage | |
| }); | |
| return app.request('waitForUserData').then(initLateHelpers); | |
| }; | |
| API = { | |
| addTransaction: function(transaction) { | |
| return app.user.transactions.add(transaction); | |
| }, | |
| getTransaction: function(id) { | |
| return app.user.transactions.byId(id); | |
| }, | |
| postMessage: function(transactionId, message, timeline) { | |
| var mesModel, messegeData; | |
| messegeData = { | |
| transaction: transactionId, | |
| message: message | |
| }; | |
| mesModel = addMessageToTimeline(messegeData, timeline); | |
| messegeData.action = 'new-message'; | |
| return _.preq.post(app.API.transactions, messegeData).then(poster_.UpdateModelIdRev(mesModel))["catch"](poster_.Rewind(mesModel, timeline))["catch"](_.Error('postMessage')); | |
| } | |
| }; | |
| addMessageToTimeline = function(messegeData, timeline) { | |
| var mesModel; | |
| _.extend(messegeData, { | |
| user: app.user.id, | |
| created: _.now() | |
| }); | |
| mesModel = new Message(messegeData); | |
| timeline.add(mesModel); | |
| return mesModel; | |
| }; | |
| initLateHelpers = function() { | |
| var filtered, getOneOngoingTransactionByItemId, getOngoingTransactionsByItemId, getOngoingTransactionsModelsByItemId, hasOngoingTransactionsByItemId; | |
| if (app.user.transactions != null) { | |
| filtered = new FilteredCollection(app.user.transactions); | |
| getOngoingTransactionsByItemId = function(itemId) { | |
| filtered.resetFilters(); | |
| filtered.filterBy('item', function(transac) { | |
| return transac.get('item') === itemId && !transac.archived; | |
| }); | |
| return filtered; | |
| }; | |
| getOngoingTransactionsModelsByItemId = function(itemId) { | |
| return app.user.transactions.filter(function(transac) { | |
| return transac.get('item') === itemId && !transac.archived; | |
| }); | |
| }; | |
| getOneOngoingTransactionByItemId = function(itemId) { | |
| return getOngoingTransactionsModelsByItemId(itemId)[0]; | |
| }; | |
| hasOngoingTransactionsByItemId = function(itemId) { | |
| return getOngoingTransactionsModelsByItemId(itemId).length > 0; | |
| }; | |
| return app.reqres.setHandlers({ | |
| 'get:transactions:ongoing:byItemId': getOngoingTransactionsByItemId, | |
| 'get:transaction:ongoing:byItemId': getOneOngoingTransactionByItemId, | |
| 'has:transactions:ongoing:byItemId': hasOngoingTransactionsByItemId | |
| }); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/transactions/lib/apply_side_effects", function(exports, require, module) { | |
| var actions, changeOwnerIfOneWay, oneWay, setItemBusyness, sideEffects; | |
| module.exports = function(transaction, state) { | |
| var item; | |
| _.log(arguments, 'applySideEffects'); | |
| item = transaction.item; | |
| sideEffects[state](transaction, item); | |
| }; | |
| setItemBusyness = function(bool, transaction, item) { | |
| return item.set('busy', bool); | |
| }; | |
| oneWay = { | |
| giving: true, | |
| lending: false, | |
| selling: true | |
| }; | |
| changeOwnerIfOneWay = function(transaction, item) { | |
| var isOneWay, transactionMode; | |
| transactionMode = transaction.get('transaction'); | |
| isOneWay = oneWay[transactionMode]; | |
| if (isOneWay == null) { | |
| throw new Error("invalid transaction mode: " + transactionMode); | |
| } | |
| if (isOneWay) { | |
| return item.set({ | |
| owner: transaction.get('requester'), | |
| details: '', | |
| transaction: 'inventorying', | |
| listing: 'private' | |
| }); | |
| } | |
| }; | |
| actions = { | |
| setItemBusyness: setItemBusyness, | |
| changeOwnerIfOneWay: changeOwnerIfOneWay | |
| }; | |
| sideEffects = sharedLib('transaction_side_effects')(actions, _); | |
| }); | |
| ;require.register("modules/transactions/lib/folders", function(exports, require, module) { | |
| module.exports = { | |
| ongoing: { | |
| id: 'ongoing', | |
| filter: function(transac, index, collection) { | |
| return !transac.archived; | |
| }, | |
| icon: 'exchange', | |
| text: 'ongoing' | |
| }, | |
| archived: { | |
| id: 'archived', | |
| filter: function(transac, index, collection) { | |
| return transac.archived; | |
| }, | |
| icon: 'archive', | |
| text: 'archived' | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/transactions/lib/format_snapshot_data", function(exports, require, module) { | |
| var formatSnapshotItem, formatSnapshotUser; | |
| module.exports = function() { | |
| var item, itemId, owner, ownerId, ref, ref1, requester, requesterId; | |
| ref = this.gets('item', 'owner', 'requester'), itemId = ref[0], ownerId = ref[1], requesterId = ref[2]; | |
| ref1 = this.get('snapshot'), item = ref1.item, owner = ref1.owner, requester = ref1.requester; | |
| return this.set({ | |
| 'snapshot.item': formatSnapshotItem(itemId, item), | |
| 'snapshot.owner': formatSnapshotUser(ownerId, owner, 'owner'), | |
| 'snapshot.requester': formatSnapshotUser(requesterId, requester, 'requester') | |
| }); | |
| }; | |
| formatSnapshotItem = function(itemId, data) { | |
| data.pathname = '/items/' + itemId; | |
| return data; | |
| }; | |
| formatSnapshotUser = function(userId, data, role) { | |
| data.pathname = '/inventory/' + userId; | |
| return data; | |
| }; | |
| }); | |
| ;require.register("modules/transactions/lib/next_actions", function(exports, require, module) { | |
| var actionsData, addTransactionInfo, findNextActions, getNextActionsData, grabOtherUsername, isArchived, proxyFindNextActions, ref, sharedLibAdapter; | |
| ref = sharedLib('transactions')(_), findNextActions = ref.findNextActions, isArchived = ref.isArchived; | |
| getNextActionsData = function(transaction) { | |
| var data, nextActions; | |
| nextActions = proxyFindNextActions(transaction); | |
| data = actionsData[nextActions]; | |
| if (data != null) { | |
| data = addTransactionInfo(data, transaction); | |
| return grabOtherUsername(transaction, data); | |
| } else { | |
| } | |
| }; | |
| proxyFindNextActions = function(transaction) { | |
| return findNextActions(sharedLibAdapter(transaction)); | |
| }; | |
| sharedLibAdapter = function(transaction) { | |
| return { | |
| name: transaction.get('transaction'), | |
| state: transaction.get('state'), | |
| mainUserIsOwner: transaction.mainUserIsOwner | |
| }; | |
| }; | |
| addTransactionInfo = function(data, transaction) { | |
| var transactionMode; | |
| transactionMode = transaction.get('transaction'); | |
| return data.map(function(action) { | |
| action.info = action.text + "_info_" + transactionMode; | |
| action.itemId = transaction.get('item'); | |
| return action; | |
| }); | |
| }; | |
| grabOtherUsername = function(transaction, actions) { | |
| var ref1, username; | |
| username = (ref1 = transaction.otherUser()) != null ? ref1.get('username') : void 0; | |
| return actions.map(function(action) { | |
| return _.extend({}, action, { | |
| username: username | |
| }); | |
| }); | |
| }; | |
| actionsData = { | |
| 'accept/decline': [ | |
| { | |
| classes: 'accept', | |
| text: 'accept_request' | |
| }, { | |
| classes: 'decline', | |
| text: 'decline_request' | |
| } | |
| ], | |
| 'confirm': [ | |
| { | |
| classes: 'confirm', | |
| text: 'confirm_reception' | |
| } | |
| ], | |
| 'returned': [ | |
| { | |
| classes: 'returned', | |
| text: 'confirm_returned' | |
| } | |
| ], | |
| 'waiting:accepted': [ | |
| { | |
| classes: 'waiting', | |
| text: 'waiting_accepted' | |
| } | |
| ], | |
| 'waiting:confirmed': [ | |
| { | |
| classes: 'waiting', | |
| text: 'waiting_confirmation' | |
| } | |
| ], | |
| 'waiting:returned': [ | |
| { | |
| classes: 'waiting', | |
| text: 'waiting_return_confirmation' | |
| } | |
| ] | |
| }; | |
| module.exports = { | |
| getNextActionsData: getNextActionsData, | |
| isArchived: function(transaction) { | |
| return isArchived(sharedLibAdapter(transaction)); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/transactions/models/action", function(exports, require, module) { | |
| var ownerActions, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = Backbone.Model.extend({ | |
| initialize: function() { | |
| return this.action = this.get('action'); | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.toJSON(), { | |
| icon: this.icon(), | |
| context: this.context(true) | |
| }); | |
| }, | |
| icon: function() { | |
| switch (this.action) { | |
| case 'requested': | |
| return 'envelope'; | |
| case 'accepted': | |
| return 'check'; | |
| case 'confirmed': | |
| return 'sign-in'; | |
| case 'declined': | |
| return 'times'; | |
| case 'returned': | |
| return 'check'; | |
| default: | |
| return _.warn(this, 'unknown action', true); | |
| } | |
| }, | |
| context: function(withLink) { | |
| return this.userAction(this.findUser(), withLink); | |
| }, | |
| findUser: function() { | |
| var ref, ref1, ref2; | |
| if (((ref = this.transaction) != null ? ref.owner : void 0) != null) { | |
| if (this.transaction.mainUserIsOwner) { | |
| if (ref1 = this.action, indexOf.call(ownerActions, ref1) >= 0) { | |
| return 'main'; | |
| } else { | |
| return 'other'; | |
| } | |
| } else { | |
| if (ref2 = this.action, indexOf.call(ownerActions, ref2) >= 0) { | |
| return 'other'; | |
| } else { | |
| return 'main'; | |
| } | |
| } | |
| } | |
| }, | |
| userAction: function(user, withLink) { | |
| if (user != null) { | |
| return _.i18n(user + "_user_" + this.action, { | |
| username: this.otherUsername(withLink) | |
| }); | |
| } | |
| }, | |
| otherUsername: function(withLink) { | |
| var href, ref, ref1, ref2, username; | |
| if (((ref = this.transaction) != null ? ref.otherUser() : void 0) != null) { | |
| username = (ref1 = this.transaction.otherUser()) != null ? ref1.get('username') : void 0; | |
| if (withLink) { | |
| href = (ref2 = this.transaction.otherUser()) != null ? ref2.get('pathname') : void 0; | |
| return "<a href='" + href + "' class='username'>" + username + "</a>"; | |
| } else { | |
| return username; | |
| } | |
| } | |
| } | |
| }); | |
| ownerActions = ['accepted', 'declined', 'returned']; | |
| }); | |
| ;require.register("modules/transactions/models/message", function(exports, require, module) { | |
| module.exports = Backbone.Model.extend({ | |
| initialize: function() { | |
| return this.reqGrab('get:user:model', this.get('user'), 'user'); | |
| }, | |
| serializeData: function() { | |
| var ref; | |
| return _.extend(this.toJSON(), { | |
| user: (ref = this.user) != null ? ref.serializeData() : void 0 | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/models/transaction", function(exports, require, module) { | |
| var Action, Filterable, Message, Timeline, applySideEffects, formatSnapshotData, getNextActionsData, isArchived, ref; | |
| ref = require('../lib/next_actions'), getNextActionsData = ref.getNextActionsData, isArchived = ref.isArchived; | |
| Filterable = require('modules/general/models/filterable'); | |
| Action = require('../models/action'); | |
| Message = require('../models/message'); | |
| Timeline = require('../collections/timeline'); | |
| formatSnapshotData = require('../lib/format_snapshot_data'); | |
| applySideEffects = require('../lib/apply_side_effects'); | |
| module.exports = Filterable.extend({ | |
| url: function() { | |
| return app.API.transactions; | |
| }, | |
| initialize: function() { | |
| this.set('pathname', "/transactions/" + this.id); | |
| this.grabLinkedModels(); | |
| this.buildTimeline(); | |
| this.fetchMessages(); | |
| this.setArchivedStatus(); | |
| this.listenToOnce(app.user, 'change', this.setMainUserIsOwner.bind(this)); | |
| this.set('actionsReady', false); | |
| this.once('grab:owner', this.setNextActions.bind(this)); | |
| this.once('grab:requester', this.setNextActions.bind(this)); | |
| this.on('change:state', this.setNextActions.bind(this)); | |
| this.on('change:state', this.setArchivedStatus.bind(this)); | |
| this.on('change:read', this.deduceReadStatus.bind(this)); | |
| this.set('icon', this.getIcon()); | |
| return formatSnapshotData.call(this); | |
| }, | |
| grabLinkedModels: function() { | |
| this.reqGrab('get:user:model', this.get('requester'), 'requester'); | |
| return this.reqGrab('get:user:model', this.get('owner'), 'owner').then((function(_this) { | |
| return function() { | |
| return _this.reqGrab('get:item:model', _this.get('item'), 'item'); | |
| }; | |
| })(this)); | |
| }, | |
| setMainUserIsOwner: function() { | |
| this.mainUserIsOwner = this.get('owner') === app.user.id; | |
| this.role = this.mainUserIsOwner ? 'owner' : 'requester'; | |
| return this.deduceReadStatus(); | |
| }, | |
| deduceReadStatus: function() { | |
| var prev; | |
| this.mainUserRead = this.get('read')[this.role]; | |
| prev = this.unreadUpdate; | |
| this.unreadUpdate = this.mainUserRead ? 0 : 1; | |
| if (this.unreadUpdate !== prev) { | |
| return app.vent.trigger('transactions:unread:change'); | |
| } | |
| }, | |
| markAsRead: function() { | |
| if (!this.mainUserRead) { | |
| this.set("read." + this.role, true); | |
| return _.preq.put(app.API.transactions, { | |
| id: this.id, | |
| action: 'mark-as-read' | |
| })["catch"](_.Error('markAsRead')); | |
| } | |
| }, | |
| buildTimeline: function() { | |
| var action, i, len, ref1, results; | |
| this.timeline = new Timeline; | |
| ref1 = this.get('actions'); | |
| results = []; | |
| for (i = 0, len = ref1.length; i < len; i++) { | |
| action = ref1[i]; | |
| results.push(this.addActionToTimeline(action)); | |
| } | |
| return results; | |
| }, | |
| addActionToTimeline: function(action) { | |
| action = new Action(action); | |
| action.transaction = this; | |
| return this.timeline.add(action); | |
| }, | |
| fetchMessages: function() { | |
| var url; | |
| url = _.buildPath(app.API.transactions, { | |
| action: 'get-messages', | |
| transaction: this.id | |
| }); | |
| return _.preq.get(url).then(this.addMessagesToTimeline.bind(this)); | |
| }, | |
| addMessagesToTimeline: function(messages) { | |
| var i, len, message, results; | |
| results = []; | |
| for (i = 0, len = messages.length; i < len; i++) { | |
| message = messages[i]; | |
| results.push(this.timeline.add(new Message(message))); | |
| } | |
| return results; | |
| }, | |
| setNextActions: function() { | |
| if ((this.owner != null) && (this.requester != null)) { | |
| return this.set({ | |
| nextActions: getNextActionsData(this), | |
| actionsReady: true | |
| }); | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs, ref1; | |
| attrs = this.toJSON(); | |
| attrs[attrs.state] = true; | |
| _.extend(attrs, { | |
| item: this.itemData(), | |
| owner: this.ownerData(), | |
| requester: this.requesterData(), | |
| messages: this.messages, | |
| mainUserIsOwner: this.mainUserIsOwner, | |
| context: this.context(), | |
| mainUserRead: this.mainUserRead | |
| }); | |
| ref1 = this.aliasUsers(attrs), attrs.user = ref1[0], attrs.other = ref1[1]; | |
| return attrs; | |
| }, | |
| itemData: function() { | |
| var ref1; | |
| return ((ref1 = this.item) != null ? ref1.serializeData() : void 0) || this.get('snapshot.item'); | |
| }, | |
| ownerData: function() { | |
| var ref1; | |
| return ((ref1 = this.owner) != null ? ref1.serializeData() : void 0) || this.get('snapshot.owner'); | |
| }, | |
| requesterData: function() { | |
| var ref1; | |
| return ((ref1 = this.requester) != null ? ref1.serializeData() : void 0) || this.get('snapshot.requester'); | |
| }, | |
| aliasUsers: function(attrs) { | |
| if (this.mainUserIsOwner) { | |
| return [attrs.owner, attrs.requester]; | |
| } else { | |
| return [attrs.requester, attrs.owner]; | |
| } | |
| }, | |
| otherUser: function() { | |
| if (this.mainUserIsOwner) { | |
| return this.requester; | |
| } else { | |
| return this.owner; | |
| } | |
| }, | |
| getIcon: function() { | |
| var transaction; | |
| transaction = this.get('transaction'); | |
| return Items.transactions.data[transaction].icon; | |
| }, | |
| context: function() { | |
| var ref1, transaction; | |
| if (this.owner != null) { | |
| transaction = this.get('transaction'); | |
| if (this.mainUserIsOwner) { | |
| return _.i18n("main_user_" + transaction); | |
| } else { | |
| return _.i18n("other_user_" + transaction, { | |
| username: (ref1 = this.owner) != null ? ref1.get('username') : void 0 | |
| }); | |
| } | |
| } | |
| }, | |
| accepted: function() { | |
| return this.updateState('accepted'); | |
| }, | |
| declined: function() { | |
| return this.updateState('declined'); | |
| }, | |
| confirmed: function() { | |
| return this.updateState('confirmed'); | |
| }, | |
| returned: function() { | |
| return this.updateState('returned'); | |
| }, | |
| updateState: function(state) { | |
| var action, actionModel, tracker, userStatus; | |
| this.backup(); | |
| this.set({ | |
| state: state | |
| }); | |
| action = { | |
| action: state, | |
| timestamp: _.now() | |
| }; | |
| this.push('actions', action); | |
| actionModel = this.addActionToTimeline(action); | |
| userStatus = this.otherUser().get('status'); | |
| tracker = app.execute.bind(app, 'track:transaction', state, userStatus); | |
| return _.preq.put(app.API.transactions, { | |
| id: this.id, | |
| state: state, | |
| action: 'update-state' | |
| }).then(_.Full(applySideEffects, null, this, state)).then(tracker)["catch"](this._updateFail.bind(this, actionModel)); | |
| }, | |
| _updateFail: function(actionModel, err) { | |
| this.restore(); | |
| this.timeline.remove(actionModel); | |
| throw err; | |
| }, | |
| backup: function() { | |
| return this._backup = this.toJSON(); | |
| }, | |
| restore: function() { | |
| return this.set(this._backup); | |
| }, | |
| setArchivedStatus: function() { | |
| var previousStatus; | |
| previousStatus = this.archived; | |
| this.archived = this.isArchived(); | |
| if (this.archived !== previousStatus) { | |
| return app.vent.trigger('transactions:folder:change'); | |
| } | |
| }, | |
| isArchived: function() { | |
| return isArchived(this); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/transactions", function(exports, require, module) { | |
| var API, RequestItemModal, TransactionsLayout, findFirstTransaction, initHelpers, lastTransactionId, navigate, triggerTransactionSelect, unreadCount, updateTransactionRoute; | |
| TransactionsLayout = require('./views/transactions_layout'); | |
| RequestItemModal = require('./views/request_item_modal'); | |
| initHelpers = require('./helpers'); | |
| lastTransactionId = null; | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) { | |
| var TransactionsRouter; | |
| TransactionsRouter = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'transactions(/)': 'showFirstTransaction', | |
| 'transactions/:id(/)': 'showTransaction' | |
| } | |
| }); | |
| return app.addInitializer(function() { | |
| return new TransactionsRouter({ | |
| controller: API | |
| }); | |
| }); | |
| }, | |
| initialize: function() { | |
| this.listenTo(app.vent, 'transaction:select', updateTransactionRoute); | |
| app.commands.setHandlers({ | |
| 'show:item:request': API.showItemRequestModal, | |
| 'show:transactions': navigate.showTransactions, | |
| 'show:transaction': navigate.showTransaction | |
| }); | |
| app.reqres.setHandlers({ | |
| 'last:transaction:id': function() { | |
| return lastTransactionId; | |
| }, | |
| 'transactions:unread:count': unreadCount | |
| }); | |
| return initHelpers(); | |
| } | |
| }; | |
| API = { | |
| showTransactions: function() { | |
| if (app.request('require:loggedIn', 'transactions')) { | |
| return app.layout.main.Show(new TransactionsLayout, _.i18n('transactions')); | |
| } | |
| }, | |
| showFirstTransaction: function() { | |
| if (app.request('require:loggedIn', 'transactions')) { | |
| this.showTransactions(); | |
| return app.request('waitForUserData').then(findFirstTransaction).then(function(transac) { | |
| var nonExplicitSelection; | |
| if (transac != null) { | |
| lastTransactionId = transac.id; | |
| nonExplicitSelection = true; | |
| return app.vent.trigger('transaction:select', transac, nonExplicitSelection); | |
| } else { | |
| return app.vent.trigger('transactions:welcome'); | |
| } | |
| })["catch"](_.Error('showFirstTransaction')); | |
| } | |
| }, | |
| showTransaction: function(id) { | |
| if (app.request('require:loggedIn', "transactions/" + id)) { | |
| lastTransactionId = id; | |
| this.showTransactions(); | |
| return app.request('waitForUserData').then(triggerTransactionSelect.bind(null, id)); | |
| } | |
| }, | |
| showItemRequestModal: function(model) { | |
| if (app.request('require:loggedIn', model.pathname)) { | |
| return app.layout.modal.show(new RequestItemModal({ | |
| model: model | |
| })); | |
| } | |
| } | |
| }; | |
| navigate = { | |
| showTransactions: function() { | |
| API.showFirstTransaction(); | |
| return app.navigate('transactions'); | |
| }, | |
| showTransaction: function(id) { | |
| API.showTransaction(id); | |
| return app.navigate("transactions/" + id); | |
| } | |
| }; | |
| triggerTransactionSelect = function(id) { | |
| var transaction; | |
| transaction = app.request('get:transaction:byId', id); | |
| if (transaction != null) { | |
| return app.vent.trigger('transaction:select', transaction); | |
| } else { | |
| return app.execute('show:404'); | |
| } | |
| }; | |
| updateTransactionRoute = function(transaction, nonExplicitSelection) { | |
| var id; | |
| id = transaction.id; | |
| if (nonExplicitSelection) { | |
| return app.navigateReplace("transactions/" + id); | |
| } else { | |
| return app.navigate("transactions/" + id); | |
| } | |
| }; | |
| findFirstTransaction = function() { | |
| var candidate, firstTransac, transacs; | |
| firstTransac = null; | |
| transacs = _.clone(app.user.transactions.models); | |
| while (transacs.length > 0 && (firstTransac == null)) { | |
| candidate = transacs.shift(); | |
| if (!candidate.archived) { | |
| firstTransac = candidate; | |
| } | |
| } | |
| return firstTransac; | |
| }; | |
| unreadCount = function() { | |
| var ref, transac; | |
| transac = (ref = app.user.transactions) != null ? ref.models : void 0; | |
| if (!((transac != null ? transac.length : void 0) > 0)) { | |
| return 0; | |
| } | |
| return transac.map(_.property('unreadUpdate')).reduce(function(a, b) { | |
| if (_.isNumber(b)) { | |
| return a + b; | |
| } else { | |
| return a; | |
| } | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/transactions/views/event", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| this.isMessage = this.model.get('message') != null; | |
| return this.setClassNames(); | |
| }, | |
| getTemplate: function() { | |
| if (this.isMessage) { | |
| return require('./templates/message'); | |
| } else { | |
| return require('./templates/action'); | |
| } | |
| }, | |
| setClassNames: function() { | |
| if (this.isMessage) { | |
| return this.$el.addClass('message'); | |
| } else { | |
| return this.$el.addClass('action'); | |
| } | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = this.model.serializeData(); | |
| attrs.sameUser = this.sameUser(); | |
| return attrs; | |
| }, | |
| modelEvents: { | |
| 'grab': 'render' | |
| }, | |
| events: { | |
| 'click .username': 'showOtherUser' | |
| }, | |
| sameUser: function() { | |
| var index, prev; | |
| if (!this.isMessage) { | |
| return; | |
| } | |
| index = this.model.collection.indexOf(this.model); | |
| if (!(index > 0)) { | |
| return; | |
| } | |
| prev = this.model.collection.models[index - 1]; | |
| if ((prev != null ? prev.get('message') : void 0) == null) { | |
| return; | |
| } | |
| if (prev.get('user') === this.model.get('user')) { | |
| return true; | |
| } | |
| }, | |
| showOtherUser: function(e) { | |
| var ref; | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:inventory:user', (ref = this.model.transaction) != null ? ref.otherUser() : void 0); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/views/no_transaction", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'noTransaction', | |
| template: require('./templates/no_transaction') | |
| }); | |
| }); | |
| ;require.register("modules/transactions/views/request_item_modal", function(exports, require, module) { | |
| var addTransaction, behaviorsPlugin, showRequest; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/request_item_modal'), | |
| className: 'requestItemModal', | |
| behaviors: { | |
| PreventDefault: {}, | |
| Loading: {}, | |
| SuccessCheck: {}, | |
| ElasticTextarea: {}, | |
| General: {} | |
| }, | |
| initialize: function() { | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| events: { | |
| 'click a#sendItemRequest': 'sendRequest' | |
| }, | |
| ui: { | |
| message: '#message' | |
| }, | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| serializeData: function() { | |
| return { | |
| item: this.model.serializeData(), | |
| user: this.userData(), | |
| suggestedText: this.suggestedText() | |
| }; | |
| }, | |
| userData: function() { | |
| var user; | |
| user = app.users.findWhere({ | |
| username: this.model.username | |
| }); | |
| return user.serializeData(); | |
| }, | |
| suggestedText: function() { | |
| var transaction; | |
| transaction = this.model.get('transaction'); | |
| return "item_request_text_suggestion_" + transaction; | |
| }, | |
| sendRequest: function() { | |
| this.startLoading('#sendItemRequest'); | |
| return this.postRequest().then(addTransaction).then(showRequest)["catch"](this.Fail('item request err')); | |
| }, | |
| postRequest: function() { | |
| var ref, tracker; | |
| tracker = app.execute.bind(app, 'track:transaction', 'request', (ref = this.userData()) != null ? ref.status : void 0); | |
| return _.preq.post(app.API.transactions, { | |
| action: 'request', | |
| item: this.model.id, | |
| message: this.ui.message.val() | |
| }).then(_.Tap(tracker)); | |
| } | |
| }); | |
| addTransaction = function(transaction) { | |
| return app.request('transactions:add', transaction); | |
| }; | |
| showRequest = function(transaction) { | |
| app.execute('modal:close'); | |
| return app.execute('show:transaction', transaction.id); | |
| }; | |
| }); | |
| ;require.register("modules/transactions/views/templates/action", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<span class=\"context\">" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + ((stack1 = ((helper = (helper = helpers.context || (depth0 != null ? depth0.context : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"context","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "</span>\n<span class=\"time\">" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.timestamp : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</span>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/message", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "sameUser"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <div class=\"innerAvatar\">\n <img src=\"" | |
| + alias1((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.picture : stack1),36,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.user : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "\">\n </div>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"avatar " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.sameUser : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n" | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.sameUser : depth0),{"name":"unless","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n<div class=\"rest " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.sameUser : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n <span class=\"time\">" | |
| + alias3((helpers.timeFromNow || (depth0 && depth0.timeFromNow) || alias2).call(alias1,(depth0 != null ? depth0.created : depth0),{"name":"timeFromNow","hash":{},"data":data})) | |
| + "</span>\n <span class=\"message\">" | |
| + alias3(((helper = (helper = helpers.message || (depth0 != null ? depth0.message : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"message","hash":{},"data":data}) : helper))) | |
| + "</span>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/no_transaction", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<em>" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"no_transaction",{"name":"i18n","hash":{},"data":data})) | |
| + "</em>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/request_item_modal", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " <img src=\"" | |
| + container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.picture : stack1),100,{"name":"src","hash":{},"data":data})) | |
| + "\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : {}, alias4=helpers.helperMissing; | |
| return "<div class=\"header\">\n <div class=\"item\">\n <div class=\"cover\">\n <a href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\" rel=\"nofollow\">\n" | |
| + ((stack1 = helpers["if"].call(alias3,((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.picture : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </a>\n </div>\n <span class=\"title\">" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.title : stack1), depth0)) | |
| + "</span>\n <span class=\"entity\">" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.entity : stack1), depth0)) | |
| + "</span>\n <p class=\"details\">" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.details : stack1), depth0)) | |
| + "</p>\n </div>\n <div class=\"user\">\n " | |
| + alias2((helpers.partial || (depth0 && depth0.partial) || alias4).call(alias3,"inventory:item_mixed_box",(depth0 != null ? depth0.item : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n </div>\n</div>\n\n<textarea id=\"message\" name=\"request-item\">\n " | |
| + alias2((helpers.i18n || (depth0 && depth0.i18n) || alias4).call(alias3,(depth0 != null ? depth0.suggestedText : depth0),(depth0 != null ? depth0.user : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "\n</textarea>\n\n<a id=\"sendItemRequest\" class=\"button success radius bold\">\n " | |
| + alias2((helpers.icon || (depth0 && depth0.icon) || alias4).call(alias3,"send",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias2((helpers.i18n || (depth0 && depth0.i18n) || alias4).call(alias3,"send request",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <a class=\"loading\"></a>\n</a>\n<div class=\"checkWrapper\">\n <span class=\"check\"></span>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/transaction", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <img src=\"" | |
| + alias1((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.pictures : stack1),100,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.title : stack1), depth0)) | |
| + "\">\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.authors : stack1), depth0)) | |
| + "\n"; | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},((stack1 = ((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.entityData : stack1)) != null ? stack1.wikidata : stack1),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.program(8, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + container.escapeExpression((helpers.claim || (depth0 && depth0.claim) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = ((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.entityData : stack1)) != null ? stack1.claims : stack1),"P50",{"name":"claim","hash":{},"data":data})) | |
| + "\n"; | |
| },"8":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " " | |
| + ((stack1 = (helpers.joinAuthors || (depth0 && depth0.joinAuthors) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = ((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.entityData : stack1)) != null ? stack1.authors : stack1),false,{"name":"joinAuthors","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n"; | |
| },"10":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.lambda, alias2=container.escapeExpression; | |
| return " <a href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.owner : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\" class=\"owner\" title=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.owner : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "\">\n <img src=\"" | |
| + alias2((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.owner : depth0)) != null ? stack1.picture : stack1),48,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.owner : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "\">\n </a>\n"; | |
| },"12":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.nextActions : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.program(17, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"13":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}; | |
| return " <h3 class=\"next\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(alias1,"next action",{"name":"i18n","hash":{},"data":data})) | |
| + ":</h3>\n <section>\n <div class=\"actions\">\n" | |
| + ((stack1 = helpers.each.call(alias1,(depth0 != null ? depth0.nextActions : depth0),{"name":"each","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n </section>\n"; | |
| },"14":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing; | |
| return " <div class=\"action\">\n <a class=\"" | |
| + container.escapeExpression(((helper = (helper = helpers.classes || (depth0 != null ? depth0.classes : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"classes","hash":{},"data":data}) : helper))) | |
| + "\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.text : depth0),depth0,{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</a>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.info : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n"; | |
| },"15":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return " <p class=\"info\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.info : depth0),depth0,{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n"; | |
| },"17":function(container,depth0,helpers,partials,data) { | |
| return " <br>\n <span class=\"finished\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"transaction_finished",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : {}, alias4=helpers.helperMissing, alias5="function"; | |
| return "<section>\n <div class=\"header\">\n <div class=\"facts\">\n <a class=\"item\" href=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.pathname : stack1), depth0)) | |
| + "\" title=\"" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.title : stack1), depth0)) | |
| + "\">\n <div class=\"cover\">\n" | |
| + ((stack1 = helpers["if"].call(alias3,((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.pictures : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"data\">\n <h4 class=\"title\">" | |
| + alias2(alias1(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.title : stack1), depth0)) | |
| + "</h4>\n <div class=\"authors\">\n" | |
| + ((stack1 = helpers["if"].call(alias3,((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.authors : stack1),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(5, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n </div>\n </a>\n <div class=\"context " | |
| + alias2(((helper = (helper = helpers.transaction || (depth0 != null ? depth0.transaction : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"transaction","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias2((helpers.icon || (depth0 && depth0.icon) || alias4).call(alias3,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + ((stack1 = ((helper = (helper = helpers.context || (depth0 != null ? depth0.context : depth0)) != null ? helper : alias4),(typeof helper === alias5 ? helper.call(alias3,{"name":"context","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias3,((stack1 = (depth0 != null ? depth0.owner : depth0)) != null ? stack1.picture : stack1),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n </div>\n </div>\n <div class=\"timeline\"></div>\n</section>\n" | |
| + ((stack1 = helpers["if"].call(alias3,(depth0 != null ? depth0.actionsReady : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "<section class=\"new-message\">\n " | |
| + alias2((helpers.partial || (depth0 && depth0.partial) || alias4).call(alias3,"new_message",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</section>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/transaction_preview", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return "unread"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}; | |
| return " <div class=\"profile-pic\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.requester : depth0)) != null ? stack1.picture : stack1),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"text\">\n <span class=\"context\">" | |
| + ((stack1 = ((helper = (helper = helpers.requestContext || (depth0 != null ? depth0.requestContext : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"requestContext","hash":{},"data":data}) : helper))) != null ? stack1 : "") | |
| + "</span>\n </div>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <img src=\"" | |
| + alias1((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.requester : depth0)) != null ? stack1.picture : stack1),48,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.requester : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "\">\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=container.lambda, alias3=container.escapeExpression; | |
| return " <div class=\"profile-pic\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.other : depth0)) != null ? stack1.picture : stack1),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"text\">\n <span class=\"title\">" | |
| + alias3(alias2(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.title : stack1), depth0)) | |
| + "</span>\n <span class=\"context\">" | |
| + alias3(alias2(((stack1 = (depth0 != null ? depth0.other : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "</span>\n </div>\n <div class=\"item-pic\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.pictures : stack1),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <img src=\"" | |
| + alias1((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.other : depth0)) != null ? stack1.picture : stack1),48,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.other : depth0)) != null ? stack1.username : stack1), depth0)) | |
| + "\">\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " <img src=\"" | |
| + alias1((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.pictures : stack1),48,{"name":"src","hash":{},"data":data})) | |
| + "\" alt=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.item : depth0)) != null ? stack1.title : stack1), depth0)) | |
| + "\">\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<a href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" class=\"showTransaction " | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.mainUserRead : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "\">\n <div class=\"current transactionBox " | |
| + alias4(((helper = (helper = helpers.transaction || (depth0 != null ? depth0.transaction : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"transaction","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + "\n </div>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.onItem : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : "") | |
| + " <div class=\"flags\">\n <div class=\"unread-flag\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"circle",{"name":"icon","hash":{},"data":data})) | |
| + "\n </div>\n </div>\n</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/transactions_layout", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <label for=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"caret-down",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias4((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,(depth0 != null ? depth0.icon : depth0),{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias4((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,(depth0 != null ? depth0.text : depth0),{"name":"I18n","hash":{},"data":data})) | |
| + "\n </label>\n <section id=\"" | |
| + alias4(((helper = (helper = helpers.id || (depth0 != null ? depth0.id : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data}) : helper))) | |
| + "\"></section>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return "<div id=\"list\">\n" | |
| + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.folders : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</div>\n\n<div id=\"fullview\"></div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/transactions_list", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<div class=\"transactions\"></div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/templates/transactions_welcome", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"exchange",{"name":"icon","hash":{},"data":data})) | |
| + "\n <h2>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"exchanges_manager_welcome_title",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <p>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"exchanges_manager_welcome_text",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/transactions/views/transaction", function(exports, require, module) { | |
| var behaviorsPlugin, error_, forms_, messagesPlugin; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| messagesPlugin = require('modules/general/plugins/messages'); | |
| forms_ = require('modules/general/lib/forms'); | |
| error_ = require('lib/error'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| template: require('./templates/transaction'), | |
| id: 'transactionView', | |
| behaviors: { | |
| AlertBox: {}, | |
| ElasticTextarea: {}, | |
| PreventDefault: {}, | |
| BackupForm: {} | |
| }, | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| this.collection = this.model.timeline; | |
| return this.initPlugins(); | |
| }, | |
| initPlugins: function() { | |
| return _.extend(this, behaviorsPlugin, messagesPlugin); | |
| }, | |
| serializeData: function() { | |
| return this.model.serializeData(); | |
| }, | |
| onShow: function() { | |
| this.model.markAsRead(); | |
| if (_.smallScreen() && !this.options.nonExplicitSelection) { | |
| return _.scrollTop(this.$el); | |
| } | |
| }, | |
| modelEvents: { | |
| 'grab': 'lazyRender', | |
| 'change': 'lazyRender' | |
| }, | |
| childViewContainer: '.timeline', | |
| childView: require('./event'), | |
| ui: { | |
| message: 'textarea.message', | |
| avatars: '.avatar img' | |
| }, | |
| events: { | |
| 'click .sendMessage': 'sendMessage', | |
| 'click .accept': 'accept', | |
| 'click .decline': 'decline', | |
| 'click .confirm': 'confirm', | |
| 'click .returned': 'returned', | |
| 'click .archive': 'archive', | |
| 'click .item': 'showItem', | |
| 'click .owner': 'showOwner' | |
| }, | |
| sendMessage: function() { | |
| return this.postMessage('transaction:post:message', this.model.timeline); | |
| }, | |
| accept: function() { | |
| return this.updateState('accepted'); | |
| }, | |
| decline: function() { | |
| return this.updateState('declined'); | |
| }, | |
| confirm: function() { | |
| return this.updateState('confirmed'); | |
| }, | |
| returned: function() { | |
| return this.updateState('returned'); | |
| }, | |
| archive: function() { | |
| return this.updateState('archive'); | |
| }, | |
| updateState: function(state) { | |
| return this.model.updateState(state)["catch"](error_.Complete('.actions'))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| showItem: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:item:show:from:model', this.model.item); | |
| } | |
| }, | |
| showOwner: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:inventory:user', this.model.owner); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/views/transaction_preview", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/transaction_preview'), | |
| className: 'transactionPreview', | |
| behaviors: { | |
| PreventDefault: {} | |
| }, | |
| initialize: function() { | |
| this.lazyRender = _.LazyRender(this); | |
| return this.listenTo(app.vent, 'transaction:select', this.autoSelect.bind(this)); | |
| }, | |
| serializeData: function() { | |
| return _.extend(this.model.serializeData(), { | |
| onItem: this.options.onItem, | |
| requestContext: this.requestContext() | |
| }); | |
| }, | |
| modelEvents: { | |
| 'grab': 'lazyRender', | |
| 'change:read': 'lazyRender' | |
| }, | |
| events: { | |
| 'click .showTransaction': 'showTransaction' | |
| }, | |
| ui: { | |
| showTransaction: 'a.showTransaction' | |
| }, | |
| onRender: function() { | |
| if (app.request('last:transaction:id') === this.model.id) { | |
| return this.$el.addClass('selected'); | |
| } | |
| }, | |
| showTransaction: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| if (this.options.onItem) { | |
| return app.execute('show:transaction', this.model.id); | |
| } else { | |
| return app.vent.trigger('transaction:select', this.model); | |
| } | |
| } | |
| }, | |
| autoSelect: function(transac) { | |
| if (transac === this.model) { | |
| return this.$el.addClass('selected'); | |
| } else { | |
| return this.$el.removeClass('selected'); | |
| } | |
| }, | |
| requestContext: function() { | |
| return this.model.timeline.models[0].context(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/views/transactions_layout", function(exports, require, module) { | |
| var Transaction, TransactionsList, TransactionsWelcome, folders, foldersNames; | |
| Transaction = require('modules/transactions/views/transaction'); | |
| TransactionsList = require('modules/transactions/views/transactions_list'); | |
| TransactionsWelcome = require('./transactions_welcome'); | |
| folders = require('../lib/folders'); | |
| foldersNames = Object.keys(folders); | |
| module.exports = Marionette.LayoutView.extend({ | |
| className: 'transactionsLayout', | |
| template: require('./templates/transactions_layout'), | |
| regions: { | |
| ongoingRegion: '#ongoing', | |
| archivedRegion: '#archived', | |
| fullviewRegion: '#fullview' | |
| }, | |
| initialize: function() { | |
| return this.listenTo(app.vent, { | |
| 'transaction:select': this.showTransactionFull.bind(this), | |
| 'transactions:welcome': this.showTransactionWelcome.bind(this) | |
| }); | |
| }, | |
| serializeData: function() { | |
| return { | |
| folders: folders | |
| }; | |
| }, | |
| onShow: function() { | |
| return app.request('waitForFriendsItems').then(this.showTransactionsFolders.bind(this)); | |
| }, | |
| showTransactionsFolders: function() { | |
| var folder, i, len, results; | |
| results = []; | |
| for (i = 0, len = foldersNames.length; i < len; i++) { | |
| folder = foldersNames[i]; | |
| results.push(this.showTransactionList(folder)); | |
| } | |
| return results; | |
| }, | |
| showTransactionList: function(folder) { | |
| return this[folder + "Region"].show(new TransactionsList({ | |
| folder: folder, | |
| collection: app.user.transactions | |
| })); | |
| }, | |
| showTransactionFull: function(transaction, nonExplicitSelection) { | |
| return this.fullviewRegion.show(new Transaction({ | |
| model: transaction, | |
| nonExplicitSelection: nonExplicitSelection | |
| })); | |
| }, | |
| events: { | |
| 'click label': 'toggleSection' | |
| }, | |
| toggleSection: function(e) { | |
| var region; | |
| region = e.currentTarget.htmlFor; | |
| $(e.currentTarget).toggleClass('toggled'); | |
| return $("#" + region).slideToggle(200); | |
| }, | |
| showTransactionWelcome: function() { | |
| return this.fullviewRegion.show(new TransactionsWelcome); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/views/transactions_list", function(exports, require, module) { | |
| var folders; | |
| folders = require('../lib/folders'); | |
| module.exports = Marionette.CompositeView.extend({ | |
| template: require('./templates/transactions_list'), | |
| className: 'transactionList', | |
| childViewContainer: '.transactions', | |
| childView: require('./transaction_preview'), | |
| emptyView: require('./no_transaction'), | |
| initialize: function() { | |
| this.folder = this.options.folder; | |
| this.filter = folders[this.folder].filter; | |
| return this.listenTo(app.vent, 'transactions:folder:change', this.render.bind(this)); | |
| }, | |
| serializeData: function() { | |
| var attrs; | |
| attrs = {}; | |
| attrs[this.folder] = true; | |
| return attrs; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/transactions/views/transactions_welcome", function(exports, require, module) { | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'transactionsWelcome', | |
| template: require('./templates/transactions_welcome') | |
| }); | |
| }); | |
| ;require.register("modules/user/lib/auth", function(exports, require, module) { | |
| var classicLogin, emailConfirmationRequest, fakeFormSubmit, passwordConfirmation, passwordResetRequest, passwordUpdate, prepareLoginRedirect, requestClassicLogin, requestClassicSignup, requestLogout; | |
| requestLogout = require('./request_logout'); | |
| module.exports = function() { | |
| app.reqres.setHandlers({ | |
| 'signup:classic': requestClassicSignup, | |
| 'login:classic': requestClassicLogin, | |
| 'password:confirmation': passwordConfirmation, | |
| 'password:update': passwordUpdate, | |
| 'password:reset:request': passwordResetRequest, | |
| 'email:confirmation:request': emailConfirmationRequest | |
| }); | |
| return app.commands.setHandlers({ | |
| 'prepare:login:redirect': prepareLoginRedirect, | |
| 'logout': requestLogout | |
| }); | |
| }; | |
| requestClassicSignup = function(options) { | |
| var password, username; | |
| username = options.username, password = options.password; | |
| return _.preq.post(app.API.auth.signup, options).then(_.Tap(app.execute.bind(app, 'track:auth:signup', 'classic'))).then(fakeFormSubmit.bind(null, username, password)); | |
| }; | |
| passwordConfirmation = function(currentPassword) { | |
| var username; | |
| username = app.user.get('username'); | |
| return classicLogin(username, currentPassword); | |
| }; | |
| requestClassicLogin = function(username, password) { | |
| return classicLogin(username, password).then(_.Tap(app.execute.bind(app, 'track:auth:login', 'classic'))).then(fakeFormSubmit.bind(null, username, password)); | |
| }; | |
| classicLogin = function(username, password) { | |
| return _.preq.post(app.API.auth.login, { | |
| strategy: 'local', | |
| username: username, | |
| password: password | |
| }); | |
| }; | |
| passwordUpdate = function(currentPassword, newPassword, selector) { | |
| var username; | |
| username = app.user.get('username'); | |
| return _.preq.post(app.API.auth.updatePassword, { | |
| currentPassword: currentPassword, | |
| newPassword: newPassword | |
| }).then(function() { | |
| if (selector != null) { | |
| return $(selector).trigger('check'); | |
| } | |
| }).then(fakeFormSubmit.bind(null, username, newPassword)); | |
| }; | |
| fakeFormSubmit = function(username, password) { | |
| $('#browserLogin').find('input[name=username]').val(username); | |
| $('#browserLogin').find('input[name=password]').val(password); | |
| return $('#browserLogin').trigger('submit'); | |
| }; | |
| passwordResetRequest = function(email) { | |
| return _.preq.post(app.API.auth.resetPassword, { | |
| email: email | |
| }); | |
| }; | |
| prepareLoginRedirect = function(redir) { | |
| var path, query, querystring, ref; | |
| _.type(redir, 'string'); | |
| if (redir[0] === '/') { | |
| redir = redir.slice(1); | |
| } | |
| app.execute('route:querystring:set', 'redirect', redir); | |
| ref = $('#browserLogin')[0].action.split('?'), path = ref[0], querystring = ref[1]; | |
| query = _.parseQuery(querystring); | |
| query.redirect = redir; | |
| return $('#browserLogin')[0].action = _.buildPath(path, query); | |
| }; | |
| emailConfirmationRequest = function() { | |
| _.log('sending emailConfirmationRequest'); | |
| return _.preq.post(app.API.auth.emailConfirmation); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/change_user_picture", function(exports, require, module) { | |
| var PicturePicker, regex_, savePicture; | |
| regex_ = sharedLib('regex'); | |
| PicturePicker = require('modules/general/views/behaviors/picture_picker'); | |
| module.exports = function() { | |
| return app.layout.modal.show(new PicturePicker({ | |
| pictures: app.user.get('picture'), | |
| save: savePicture, | |
| crop: true, | |
| limit: 1 | |
| })); | |
| }; | |
| savePicture = function(pictures) { | |
| var picture; | |
| picture = pictures[0]; | |
| _.log(picture, 'picture'); | |
| if (!_.isLocalImg(picture)) { | |
| throw new Error('couldnt save picture: requires a local image url'); | |
| } | |
| return app.request('user:update', { | |
| attribute: 'picture', | |
| value: picture, | |
| selector: '#changePicture' | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/email_tests", function(exports, require, module) { | |
| var emailTests, forms_; | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = { | |
| pass: function(email, selector) { | |
| return forms_.pass({ | |
| value: email, | |
| tests: emailTests, | |
| selector: selector | |
| }); | |
| }, | |
| verifyExistance: function(email, selector) { | |
| return _.preq.get(app.API.services.emailValidation(email)).then(function(res) { | |
| var err; | |
| _.log(res, 'email verifyExistance res'); | |
| if (!res.is_valid) { | |
| err = new Error('invalid email'); | |
| err.selector = selector; | |
| throw err; | |
| } else { | |
| return res.did_you_mean; | |
| } | |
| }); | |
| }, | |
| verifyAvailability: function(email, selector) { | |
| return _.preq.post(app.API.auth.emailAvailability, { | |
| email: email | |
| })["catch"](function(err) { | |
| err.selector = selector; | |
| throw err; | |
| }); | |
| } | |
| }; | |
| emailTests = { | |
| "it doesn't look like an email": function(email) { | |
| return !_.isEmail(email); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/password_tests", function(exports, require, module) { | |
| var forms_, passwordTests; | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = { | |
| pass: function(password, selector) { | |
| return forms_.pass({ | |
| value: password, | |
| tests: passwordTests, | |
| selector: selector | |
| }); | |
| } | |
| }; | |
| passwordTests = { | |
| 'password should be 8 characters minimum': function(password) { | |
| return password.length < 8; | |
| }, | |
| 'password should be 60 characters maximum': function(password) { | |
| return password.length > 60; | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/recover_user_data", function(exports, require, module) { | |
| var fetchError, fetchSuccess, fetchUser, resetSession, userReady; | |
| module.exports = function(app) { | |
| var base; | |
| if ($.cookie('lang')) { | |
| (base = app.user).lang || (base.lang = $.cookie('lang')); | |
| } | |
| if ($.cookie('loggedIn') != null) { | |
| app.user.loggedIn = true; | |
| return fetchUser(); | |
| } else { | |
| app.user.loggedIn = false; | |
| return userReady(); | |
| } | |
| }; | |
| fetchUser = function() { | |
| return app.user.fetch().then(fetchSuccess).fail(fetchError).always(userReady); | |
| }; | |
| fetchSuccess = function(userAttrs) { | |
| var lang; | |
| if (app.user.get('language') == null) { | |
| if (lang = $.cookie('lang')) { | |
| return _.log(app.user.set('language', lang), 'language set from cookie'); | |
| } | |
| } | |
| }; | |
| fetchError = function(err) { | |
| _.error(err, 'recoverUserData fail'); | |
| return resetSession(); | |
| }; | |
| userReady = function() { | |
| app.vent.trigger('user:ready'); | |
| return app.user.fetched = true; | |
| }; | |
| resetSession = function() { | |
| return app.user.loggedIn = false; | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/request_logout", function(exports, require, module) { | |
| var deleteLocalDatabases, logoutError, logoutSuccess; | |
| module.exports = function() { | |
| return _.preq.post(app.API.auth.logout).then(logoutSuccess)["catch"](logoutError); | |
| }; | |
| logoutSuccess = function(data) { | |
| deleteLocalDatabases(); | |
| _.log("You have been successfully logged out"); | |
| return window.location.href = '/'; | |
| }; | |
| logoutError = function(err) { | |
| return _.error(err, 'logout error'); | |
| }; | |
| deleteLocalDatabases = function() { | |
| var debug; | |
| debug = localStorageProxy.getItem('debug'); | |
| localStorageProxy.clear(); | |
| localStorageProxy.setItem('debug', debug); | |
| return window.dbs.reset(); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/solve_lang", function(exports, require, module) { | |
| var guessLanguage, guessShortLang; | |
| guessLanguage = function() { | |
| var lang; | |
| lang = $.cookie('lang'); | |
| if (lang != null) { | |
| return lang; | |
| } | |
| lang = window.browserLocale(); | |
| if (lang != null) { | |
| return lang; | |
| } | |
| return 'en'; | |
| }; | |
| guessShortLang = function() { | |
| return _.shortLang(guessLanguage()); | |
| }; | |
| module.exports = function(userLanguage) { | |
| var lang, qsLang; | |
| qsLang = app.request('route:querystring:get', 'lang'); | |
| lang = qsLang || userLanguage || guessLanguage(); | |
| return _.log(_.shortLang(lang), 'lang'); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/user_language_update", function(exports, require, module) { | |
| module.exports = function(app) { | |
| return app.user.on('change:language', function(data) { | |
| var lang; | |
| if (app.polyglot != null) { | |
| lang = app.user.get('language'); | |
| if (lang !== app.polyglot.currentLocale) { | |
| app.request('i18n:set', lang); | |
| return _.setCookie('lang', lang); | |
| } | |
| } | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/user_listings", function(exports, require, module) { | |
| module.exports = function(app) { | |
| app.user.listings = function() { | |
| return { | |
| "private": { | |
| id: 'private', | |
| icon: 'lock', | |
| unicodeIcon: '', | |
| label: 'private' | |
| }, | |
| friends: { | |
| id: 'friends', | |
| icon: 'users', | |
| unicodeIcon: '', | |
| label: 'friends and groups' | |
| }, | |
| "public": { | |
| id: 'public', | |
| icon: 'globe', | |
| unicodeIcon: '', | |
| label: 'public' | |
| } | |
| }; | |
| }; | |
| return app.user.listings.data = Object.freeze(app.user.listings()); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/user_menu_update", function(exports, require, module) { | |
| var AccountMenu, NotLoggedMenu, showMenu; | |
| AccountMenu = require('modules/general/views/menu/account_menu'); | |
| NotLoggedMenu = require('modules/general/views/menu/not_logged_menu'); | |
| module.exports = function() { | |
| app.commands.setHandlers({ | |
| 'show:user:menu:update': showMenu | |
| }); | |
| return app.user.on('change', showMenu); | |
| }; | |
| showMenu = function() { | |
| var ref, ref1; | |
| if (app.user.has('email')) { | |
| return (ref = app.layout) != null ? ref.accountMenu.show(new AccountMenu({ | |
| model: app.user | |
| })) : void 0; | |
| } else { | |
| return (ref1 = app.layout) != null ? ref1.accountMenu.show(new NotLoggedMenu) : void 0; | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/user_update", function(exports, require, module) { | |
| var Updater; | |
| Updater = require('lib/model_update').Updater; | |
| module.exports = function(app) { | |
| var userUpdater; | |
| userUpdater = Updater({ | |
| endpoint: app.API.user, | |
| uniqueModel: app.user | |
| }); | |
| return app.reqres.setHandlers({ | |
| 'user:update': userUpdater | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/user/lib/username_tests", function(exports, require, module) { | |
| var forms_, usernameTests, username_; | |
| forms_ = require('modules/general/lib/forms'); | |
| module.exports = username_ = { | |
| pass: function(username, selector) { | |
| return forms_.pass({ | |
| value: username, | |
| tests: usernameTests, | |
| selector: selector | |
| }); | |
| }, | |
| verifyAvailability: function(username, selector) { | |
| return _.preq.post(app.API.auth.usernameAvailability, { | |
| username: username | |
| })["catch"](function(err) { | |
| err.selector = selector; | |
| throw err; | |
| }); | |
| } | |
| }; | |
| username_.verifyUsername = function(username, selector) { | |
| return _.preq.start.then(username_.pass.bind(null, username, selector)).then(username_.verifyAvailability.bind(null, username, selector)); | |
| }; | |
| usernameTests = { | |
| "username can't be empty": function(username) { | |
| return username === ''; | |
| }, | |
| 'username should be 20 characters maximum': function(username) { | |
| return username.length > 20; | |
| }, | |
| "username can't contain space": function(username) { | |
| return /\s/.test(username); | |
| }, | |
| 'username can only contain letters, figures or _': function(username) { | |
| return /\W/.test(username); | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/user/models/main_user", function(exports, require, module) { | |
| var Groups, Transactions, UserCommons, notificationsList, solveLang; | |
| UserCommons = require('modules/users/models/user_commons'); | |
| Transactions = require('modules/transactions/collections/transactions'); | |
| Groups = require('modules/network/collections/groups'); | |
| solveLang = require('../lib/solve_lang'); | |
| notificationsList = sharedLib('notifications_settings_list'); | |
| module.exports = UserCommons.extend({ | |
| isMainUser: true, | |
| url: function() { | |
| return app.API.user; | |
| }, | |
| parse: function(data) { | |
| var groups, notifications, relations, settings, transactions; | |
| notifications = data.notifications, relations = data.relations, transactions = data.transactions, groups = data.groups, settings = data.settings; | |
| this.addNotifications(notifications); | |
| data.settings = this.setDefaultSettings(settings); | |
| this.relations = relations; | |
| this.transactions = new Transactions(transactions); | |
| this.groups = new Groups(groups); | |
| app.vent.trigger('transactions:unread:changes'); | |
| return _(data).omit(['relations', 'notifications', 'transactions', 'groups']); | |
| }, | |
| initialize: function() { | |
| this.setLang(); | |
| this.on('change:language', this.setLang.bind(this)); | |
| this.on('change:username', this.setPathname.bind(this)); | |
| this.on('change:position', this.setLatLng.bind(this)); | |
| return this.once('change:_id', function(model, id) { | |
| return app.execute('track:user:id', id); | |
| }); | |
| }, | |
| setLang: function() { | |
| return this.lang = solveLang(this.get('language')); | |
| }, | |
| addNotifications: function(notifications) { | |
| if (notifications != null) { | |
| return app.request('waitForData').then(app.request.bind(app, 'notifications:add', notifications)); | |
| } | |
| }, | |
| setDefaultSettings: function(settings) { | |
| settings.notifications = this.setDefaultNotificationsSettings(settings.notifications); | |
| return settings; | |
| }, | |
| setDefaultNotificationsSettings: function(notifications) { | |
| var i, len, notif; | |
| for (i = 0, len = notificationsList.length; i < len; i++) { | |
| notif = notificationsList[i]; | |
| notifications[notif] = notifications[notif] !== false; | |
| } | |
| return notifications; | |
| }, | |
| serializeData: function(nonPrivate) { | |
| var attrs; | |
| attrs = this.toJSON(); | |
| attrs.mainUser = true; | |
| attrs.inventoryLength = this.inventoryLength(nonPrivate); | |
| return attrs; | |
| }, | |
| inventoryLength: function(nonPrivate) { | |
| if (this.itemsFetched) { | |
| return app.request('inventory:main:user:length', nonPrivate); | |
| } | |
| }, | |
| deleteAccount: function() { | |
| console.log('starting to play "Somebody that I use to know" and cry a little bit'); | |
| return _.preq.wrap(this.destroy()).then(function() { | |
| return app.execute('logout'); | |
| }); | |
| }, | |
| distanceFromMainUser: function() { | |
| return null; | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/user/user", function(exports, require, module) { | |
| var API, ForgotPassword, Login, LoginPersona, MainUser, ResetPassword, SignupClassic, initCommands, initSubModules, redirected, subModules; | |
| MainUser = require('./models/main_user'); | |
| SignupClassic = require('./views/signup_classic'); | |
| Login = require('./views/login'); | |
| LoginPersona = require('./views/login_persona'); | |
| ForgotPassword = require('./views/forgot_password'); | |
| ResetPassword = require('./views/reset_password'); | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) { | |
| var UserRouter; | |
| UserRouter = Marionette.AppRouter.extend({ | |
| appRoutes: { | |
| 'signup(/persona)(/)': 'showSignup', | |
| 'login(/)': 'showLogin', | |
| 'login/persona(/)': 'showLoginPersona', | |
| 'login/forgot-password(/)': 'showForgotPassword', | |
| 'login/reset-password(/)': 'showResetPassword' | |
| } | |
| }); | |
| app.addInitializer(function() { | |
| return new UserRouter({ | |
| controller: API | |
| }); | |
| }); | |
| app.user = new MainUser; | |
| initCommands(app); | |
| return initSubModules(app); | |
| } | |
| }; | |
| API = { | |
| showSignup: function() { | |
| if (!redirected('show:signup')) { | |
| app.layout.main.Show(new SignupClassic, _.I18n('sign up')); | |
| return app.navigate('signup'); | |
| } | |
| }, | |
| showLogin: function() { | |
| if (!redirected('show:login')) { | |
| app.layout.main.Show(new Login, _.I18n('login')); | |
| return app.navigate('login'); | |
| } | |
| }, | |
| showLoginPersona: function() { | |
| if (!redirected('show:login:persona')) { | |
| app.navigate('login/persona'); | |
| return app.layout.main.Show(new LoginPersona, _.I18n('login with Persona')); | |
| } | |
| }, | |
| showForgotPassword: function(options) { | |
| app.layout.main.Show(new ForgotPassword(options), _.I18n('forgot password')); | |
| return app.navigate('login/forgot-password'); | |
| }, | |
| showResetPassword: function() { | |
| if (app.user.loggedIn) { | |
| return app.layout.main.Show(new ResetPassword, _.I18n('reset password')); | |
| } else { | |
| return app.execute('show:forgot:password'); | |
| } | |
| } | |
| }; | |
| redirected = function(command) { | |
| if (!navigator.cookieEnabled) { | |
| app.execute('show:error:cookieRequired', command); | |
| return true; | |
| } | |
| if (!app.user.loggedIn) { | |
| return false; | |
| } | |
| app.execute('show:home'); | |
| return true; | |
| }; | |
| initCommands = function(app) { | |
| return app.commands.setHandlers({ | |
| 'show:signup': API.showSignup, | |
| 'show:login': API.showLogin, | |
| 'show:login:persona': API.showLoginPersona, | |
| 'show:forgot:password': API.showForgotPassword | |
| }); | |
| }; | |
| subModules = ['auth', 'recover_user_data', 'user_listings', 'user_update', 'user_menu_update', 'user_language_update']; | |
| initSubModules = function(app) { | |
| var i, len, results, subModule; | |
| results = []; | |
| for (i = 0, len = subModules.length; i < len; i++) { | |
| subModule = subModules[i]; | |
| results.push(require("./lib/" + subModule)(app)); | |
| } | |
| return results; | |
| }; | |
| }); | |
| ;require.register("modules/user/views/forgot_password", function(exports, require, module) { | |
| var behaviorsPlugin, email_, formatErr, forms_, unknownEmail, verifyKnownEmail; | |
| email_ = require('modules/user/lib/email_tests'); | |
| forms_ = require('modules/general/lib/forms'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'authMenu login', | |
| template: require('./templates/forgot_password'), | |
| behaviors: { | |
| AlertBox: {}, | |
| SuccessCheck: {}, | |
| Loading: {} | |
| }, | |
| ui: { | |
| email: '#emailField', | |
| confirmationEmailSent: '#confirmationEmailSent' | |
| }, | |
| initialize: function() { | |
| _.extend(this, behaviorsPlugin); | |
| return this.lazySendEmail = _.debounce(this.sendEmail.bind(this), 1500, true); | |
| }, | |
| serializeData: function() { | |
| return { | |
| emailPicker: this.emailPickerData(), | |
| header: this.headerData() | |
| }; | |
| }, | |
| headerData: function() { | |
| if (this.options.createPasswordMode) { | |
| return 'create a password'; | |
| } else { | |
| return 'forgot password?'; | |
| } | |
| }, | |
| emailPickerData: function() { | |
| return { | |
| nameBase: 'email', | |
| special: true, | |
| field: { | |
| value: app.user.get('email') | |
| }, | |
| button: { | |
| text: _.i18n('send email'), | |
| classes: 'grey postfix' | |
| } | |
| }; | |
| }, | |
| events: function() { | |
| return { | |
| 'click a#emailButton': 'lazySendEmail' | |
| }; | |
| }, | |
| sendEmail: function() { | |
| var email; | |
| email = this.ui.email.val(); | |
| return _.preq.start.then(function() { | |
| return email_.pass(email, '#emailField'); | |
| }).then(this.startLoading.bind(this, '#emailButton')).then(verifyKnownEmail.bind(null, email)).then(this.sendResetPasswordLink.bind(this, email)).then(this.showSuccessMessage.bind(this))["catch"](forms_.catchAlert.bind(null, this))["finally"](this.stopLoading.bind(this)); | |
| }, | |
| sendResetPasswordLink: function(email) { | |
| return app.request('password:reset:request', email)["catch"](formatErr); | |
| }, | |
| showSuccessMessage: function() { | |
| return this.ui.confirmationEmailSent.fadeIn(); | |
| } | |
| }); | |
| verifyKnownEmail = function(email) { | |
| return email_.verifyAvailability(email, "#emailField").then(unknownEmail)["catch"](function(err) { | |
| if (err.status === 400) { | |
| return 'known email'; | |
| } else { | |
| throw err; | |
| } | |
| }); | |
| }; | |
| unknownEmail = function() { | |
| return formatErr(new Error('this email is unknown')); | |
| }; | |
| formatErr = function(err) { | |
| err.selector = '#emailField'; | |
| throw err; | |
| }; | |
| }); | |
| ;require.register("modules/user/views/login", function(exports, require, module) { | |
| var behaviorsPlugin, forms_, password_, username_; | |
| username_ = require('modules/user/lib/username_tests'); | |
| password_ = require('modules/user/lib/password_tests'); | |
| forms_ = require('modules/general/lib/forms'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'authMenu login', | |
| template: require('./templates/login'), | |
| events: { | |
| 'blur #username': 'earlyVerifyUsername', | |
| 'click #classicLogin': 'classicLoginAttempt', | |
| 'click #personaLogin': 'showPersonaLogin', | |
| 'click #createAccount': function() { | |
| return app.execute('show:signup'); | |
| }, | |
| 'click #forgotPassword': function() { | |
| return app.execute('show:forgot:password'); | |
| } | |
| }, | |
| behaviors: { | |
| Loading: {}, | |
| SuccessCheck: {}, | |
| AlertBox: {}, | |
| TogglePassword: {} | |
| }, | |
| ui: { | |
| username: '#username', | |
| password: '#password' | |
| }, | |
| initialize: function() { | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| onShow: function() { | |
| return this.ui.username.focus(); | |
| }, | |
| serializeData: function() { | |
| return { | |
| passwordLabel: 'password' | |
| }; | |
| }, | |
| classicLoginAttempt: function() { | |
| return _.preq.start.then(this.verifyUsername.bind(this)).then(this.verifyPassword.bind(this)).then(this.classicLogin.bind(this))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| verifyUsername: function(username) { | |
| username = this.ui.username.val(); | |
| if (!_.isEmail(username)) { | |
| return username_.pass(username, '#username'); | |
| } | |
| }, | |
| earlyVerifyUsername: function(e) { | |
| return forms_.earlyVerify(this, e, this.verifyUsername.bind(this)); | |
| }, | |
| verifyPassword: function() { | |
| return password_.pass(this.ui.password.val(), '#finalAlertbox'); | |
| }, | |
| classicLogin: function() { | |
| var password, username; | |
| username = this.ui.username.val(); | |
| password = this.ui.password.val(); | |
| app.request('login:classic', username, password)["catch"](this.loginError.bind(this)); | |
| return this.startLoading('#classicLogin'); | |
| }, | |
| loginError: function(err) { | |
| this.stopLoading(); | |
| if (err.status === 401) { | |
| return this.alert(this.getErrMessage()); | |
| } else { | |
| return _.error(err, 'classic login err'); | |
| } | |
| }, | |
| getErrMessage: function() { | |
| var username; | |
| username = this.ui.username.val(); | |
| if (_.isEmail(username)) { | |
| return 'email or password is incorrect'; | |
| } else { | |
| return 'username or password is incorrect'; | |
| } | |
| }, | |
| showPersonaLogin: function() { | |
| return app.execute('show:login:persona'); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/user/views/login_persona", function(exports, require, module) { | |
| var subject; | |
| subject = 'I need help on switching from Persona to an account with a password'; | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'authMenu persona', | |
| template: require('./templates/login_persona'), | |
| events: { | |
| 'click #createPassword': 'createPassword', | |
| 'click #askForHelp': 'askForHelp' | |
| }, | |
| createPassword: function() { | |
| return app.execute('show:forgot:password', { | |
| createPasswordMode: true | |
| }); | |
| }, | |
| askForHelp: function() { | |
| return app.execute('show:feedback:menu', { | |
| subject: _.i18n(subject) | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/user/views/reset_password", function(exports, require, module) { | |
| var behaviorsPlugin, formatErr, forms_, password_; | |
| password_ = require('modules/user/lib/password_tests'); | |
| forms_ = require('modules/general/lib/forms'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'authMenu login', | |
| template: require('./templates/reset_password'), | |
| behaviors: { | |
| AlertBox: {}, | |
| SuccessCheck: {}, | |
| Loading: {}, | |
| TogglePassword: {} | |
| }, | |
| ui: { | |
| password: '#password' | |
| }, | |
| initialize: function() { | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| events: { | |
| 'click #updatePassword': 'updatePassword', | |
| 'click #forgotPassword': function() { | |
| return app.execute('show:forgot:password'); | |
| } | |
| }, | |
| serializeData: function() { | |
| return { | |
| passwordLabel: 'new password', | |
| username: app.user.get('username') | |
| }; | |
| }, | |
| updatePassword: function() { | |
| var password; | |
| password = this.ui.password.val(); | |
| return _.preq.start.then(function() { | |
| return password_.pass(password, '#finalAlertbox'); | |
| }).then(this.startLoading.bind(this, '#updatePassword')).then(this.updateUserPassword.bind(this, password)).then(this.passwordSuccessCheck.bind(this))["catch"](forms_.catchAlert.bind(null, this))["finally"](this.stopLoading.bind(this)); | |
| }, | |
| updateUserPassword: function(password) { | |
| app.execute('prepare:login:redirect', 'home'); | |
| return app.request('password:update', void 0, password, '#password')["catch"](formatErr); | |
| }, | |
| passwordSuccessCheck: function() { | |
| this.ui.passwords.val(''); | |
| return this.ui.password.trigger('check'); | |
| } | |
| }); | |
| formatErr = function(err) { | |
| _.error(err, 'formatErr'); | |
| err.selector = '#finalAlertbox'; | |
| throw err; | |
| }; | |
| }); | |
| ;require.register("modules/user/views/signup_classic", function(exports, require, module) { | |
| var behaviorsPlugin, email_, forms_, password_, username_; | |
| username_ = require('modules/user/lib/username_tests'); | |
| email_ = require('modules/user/lib/email_tests'); | |
| password_ = require('modules/user/lib/password_tests'); | |
| forms_ = require('modules/general/lib/forms'); | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| className: 'authMenu signup', | |
| template: require('./templates/signup_classic'), | |
| behaviors: { | |
| AlertBox: {}, | |
| TogglePassword: {}, | |
| Loading: {} | |
| }, | |
| ui: { | |
| classicUsername: '#classicUsername', | |
| email: '#email', | |
| suggestionGroup: '#suggestionGroup', | |
| suggestion: '#suggestion', | |
| password: '#password' | |
| }, | |
| initialize: function() { | |
| return _.extend(this, behaviorsPlugin); | |
| }, | |
| events: { | |
| 'blur #classicUsername': 'earlyVerifyClassicUsername', | |
| 'blur #email': 'earlyVerifyEmail', | |
| 'click #classicSignup': 'validClassicSignup', | |
| 'click #suggestion': 'replaceEmail' | |
| }, | |
| onShow: function() { | |
| return this.ui.classicUsername.focus(); | |
| }, | |
| serializeData: function() { | |
| return { | |
| passwordLabel: 'password' | |
| }; | |
| }, | |
| validClassicSignup: function() { | |
| return this.verifyClassicUsername().then(this.verifyEmail.bind(this)).then(this.verifyPassword.bind(this)).then(this.startLoading.bind(this, '#classicSignup')).then(this.sendClassicSignupRequest.bind(this))["catch"](forms_.catchAlert.bind(null, this)); | |
| }, | |
| verifyClassicUsername: function() { | |
| return this.verifyUsername('classicUsername'); | |
| }, | |
| verifyEmail: function() { | |
| var email; | |
| email = this.ui.email.val(); | |
| email_.pass(email, '#email'); | |
| return email_.verifyAvailability(email, "#email").then(email_.verifyExistance.bind(email_, email, '#email')).then(this.showSuggestion.bind(this)); | |
| }, | |
| showSuggestion: function(suggestion) { | |
| if (suggestion != null) { | |
| this.ui.suggestion.text(suggestion); | |
| this.ui.suggestionGroup.fadeIn(); | |
| return this.suggestion = suggestion; | |
| } else { | |
| return _.log('no suggestion'); | |
| } | |
| }, | |
| replaceEmail: function() { | |
| this.ui.email.val(this.suggestion); | |
| return this.ui.suggestionGroup.fadeOut(); | |
| }, | |
| verifyPassword: function() { | |
| return password_.pass(this.ui.password.val(), '#finalAlertbox'); | |
| }, | |
| sendClassicSignupRequest: function() { | |
| return app.request('signup:classic', { | |
| username: this.ui.classicUsername.val(), | |
| password: this.ui.password.val(), | |
| email: this.ui.email.val(), | |
| strategy: 'local' | |
| }); | |
| }, | |
| verifyUsername: function(name) { | |
| var username; | |
| username = this.ui[name].val(); | |
| return username_.verifyUsername(username, "#" + name); | |
| }, | |
| earlyVerifyClassicUsername: function(e) { | |
| return forms_.earlyVerify(this, e, this.verifyClassicUsername.bind(this)); | |
| }, | |
| earlyVerifyEmail: function(e) { | |
| return forms_.earlyVerify(this, e, this.verifyEmail.bind(this)); | |
| }, | |
| earlyVerifyPassword: function(e) { | |
| return forms_.earlyVerify(this, e, this.verifyPassword.bind(this)); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/user/views/templates/forgot_password", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"custom-cell\">\n <h2 class=\"subheader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.header : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <p class=\"note\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"send an email to reset my password",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n " | |
| + alias3((helpers.input || (depth0 && depth0.input) || alias2).call(alias1,(depth0 != null ? depth0.emailPicker : depth0),{"name":"input","hash":{},"data":data})) | |
| + "\n <div id=\"confirmationEmailSent\" class=\"hidden successMessageBox\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"check",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"confirmation_password_reset_email_sent",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/language_picker", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return " <option value=\"" | |
| + alias4(((helper = (helper = helpers.code || (depth0 != null ? depth0.code : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"code","hash":{},"data":data}) : helper))) | |
| + "\" " | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.selected : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ">" | |
| + alias4(((helper = (helper = helpers.code || (depth0 != null ? depth0.code : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"code","hash":{},"data":data}) : helper))) | |
| + " - " | |
| + alias4(((helper = (helper = helpers["native"] || (depth0 != null ? depth0["native"] : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"native","hash":{},"data":data}) : helper))) | |
| + "</option>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| return "selected"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return "<select id=\"languagePicker\" name=\"language\">\n" | |
| + ((stack1 = helpers.each.call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.languages : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</select>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/login", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"custom-cell\">\n <h2 class=\"subheader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"login",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <form>\n <label for=\"username\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"username",{"name":"i18n","hash":{},"data":data})) | |
| + "<br>\n <span class=\"complement\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"or email address",{"name":"i18n","hash":{},"data":data})) | |
| + ")</span>\n </label>\n <div>\n <input type=\"text\" id=\"username\" name=\"username\" class=\"enterClick radius\">\n </div>\n\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"user:password_input",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n\n <a id=\"classicLogin\" class=\"button radius light-blue\" tabindex=\"0\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"login",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n </form>\n\n <div class=\"otherOptions\">\n <a id=\"createAccount\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"create an account",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n <a id=\"forgotPassword\" class=\"link\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"forgot your password?",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"horizontal_separator","or login with",{"name":"partial","hash":{},"data":data})) | |
| + "\n\n <a id=\"personaLogin\" class=\"button radius dark-grey\" tabindex=\"0\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"persona",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/login_persona", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"custom-cell\">\n <h2 class=\"subheader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"login with Persona",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <p class=\"persona-sunset\">\n " | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"persona_sunset",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "\n </p>\n <a id=\"createPassword\" class=\"button dark-grey radius bold\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"create a password",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n <br>\n <p class=\"help\">\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"life-ring",{"name":"icon","hash":{},"data":data})) | |
| + "\n <a id=\"askForHelp\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"ask for help",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </p>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/password_input", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<label for=\"password\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.passwordLabel : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n<div class=\"passwordGroup\">\n <input type=\"password\" id=\"password\" name=\"password\" class=\"enterClick radius-left\" " | |
| + alias3(((helper = (helper = helpers.disableAuto || (depth0 != null ? depth0.disableAuto : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"disableAuto","hash":{},"data":data}) : helper))) | |
| + ">\n <a class=\"showPassword\" class=\"radius-right\">\n <span class=\"displayed\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"show",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <span class=\"substitute\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"hide",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n </a>\n</div>\n\n<div>\n <div id=\"finalAlertbox\" class=\"has-alertbox\"></div>\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/reset_password", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div class=\"custom-cell resetPassword\">\n <h2 class=\"subheader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"reset password",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <form>\n <input type=\"text\" name=\"username\" value=\"" | |
| + alias3(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + "\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"user:password_input",depth0,"check",{"name":"partial","hash":{},"data":data})) | |
| + "\n <a id=\"updatePassword\" class=\"button success radius\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"udpate password",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </form>\n <div>\n <a id=\"forgotPassword\" class=\"link\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"request_new_token",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n </div>\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/signup_classic", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<form class=\"custom-cell\">\n <h2 class=\"subheader\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"sign up",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n\n <label for=\"classicUsername\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"username",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <div>\n <input type=\"text\" name=\"username\" id=\"classicUsername\" class=\"enterClick radius\">\n </div>\n\n <label for=\"email\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email",{"name":"i18n","hash":{},"data":data})) | |
| + "</label>\n <div>\n <input type=\"text\" name=\"email\" id=\"email\" class=\"enterClick radius\" " | |
| + alias3(((helper = (helper = helpers.disableAuto || (depth0 != null ? depth0.disableAuto : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"disableAuto","hash":{},"data":data}) : helper))) | |
| + ">\n </div>\n <div id=\"suggestionGroup\" class=\"hidden\">\n <span class=\"legend\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"did you mean:",{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n <a id=\"suggestion\"></a>\n </div>\n\n\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"user:password_input",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n\n <a id=\"classicSignup\" class=\"button radius light-blue\" tabindex=\"0\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"sign up",{"name":"i18n","hash":{},"data":data})) | |
| + "\n <span class=\"loading\"></span>\n </a>\n</form>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/templates/valid_email_confirmation", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"valid\">\n <p>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"check",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email_confirmation_success",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(4, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n"; | |
| },"2":function(container,depth0,helpers,partials,data) { | |
| return " <a class=\"button dark-grey radius showHome\">\n " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"back to your inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"4":function(container,depth0,helpers,partials,data) { | |
| return " <a class=\"button dark-grey radius showLogin\">\n " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"login to your inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"6":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <div class=\"invalid\">\n <p>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"bolt",{"name":"icon","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email_confirmation_error",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.program(9, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"loading\"></div>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| return " <a id=\"emailConfirmationRequest\" class=\"button dark-grey radius\">\n " | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"email_confirmation_error_button",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"9":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <p class=\"offline\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"email_confirmation_offline_error",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </p>\n <a class=\"button dark-grey radius showLoginRedirectSettings\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"login",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.validEmail : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(6, data, 0),"data":data})) != null ? stack1 : ""); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/user/views/valid_email_confirmation", function(exports, require, module) { | |
| var emailFail, emailSent; | |
| module.exports = Marionette.ItemView.extend({ | |
| className: 'validEmailConfirmation', | |
| template: require('./templates/valid_email_confirmation'), | |
| behaviors: { | |
| Loading: {}, | |
| General: {} | |
| }, | |
| events: { | |
| 'click .showHome, .showLoginRedirectSettings': function() { | |
| return app.execute('modal:close'); | |
| }, | |
| 'click .showLoginRedirectSettings': 'showLoginRedirectSettings', | |
| 'click #emailConfirmationRequest': 'emailConfirmationRequest' | |
| }, | |
| onShow: function() { | |
| return app.execute('modal:open'); | |
| }, | |
| serializeData: function() { | |
| return { | |
| validEmail: this.options.validEmail, | |
| loggedIn: app.user.loggedIn | |
| }; | |
| }, | |
| emailConfirmationRequest: function() { | |
| this.$el.trigger('loading'); | |
| return app.request('email:confirmation:request').then(emailSent)["catch"](emailFail.bind(this)); | |
| }, | |
| showLoginRedirectSettings: function() { | |
| return app.request('show:login:redirect', 'settings/profile'); | |
| } | |
| }); | |
| emailSent = function() { | |
| return app.execute('modal:close'); | |
| }; | |
| emailFail = function() { | |
| return this.$el.trigger('somethingWentWrong'); | |
| }; | |
| }); | |
| ;require.register("modules/users/collections/users", function(exports, require, module) { | |
| module.exports = Backbone.Collection.extend({ | |
| model: require("../models/user"), | |
| url: function() { | |
| return app.API.users.friends; | |
| }, | |
| initialize: function() { | |
| this.lazyResort = _.debounce(this.sort.bind(this), 500); | |
| return this.on('change:highlightScore', this.lazyResort); | |
| }, | |
| comparator: 'highlightScore', | |
| filtered: function(text) { | |
| return this.filter(function(user) { | |
| var filterExpr; | |
| filterExpr = new RegExp('^' + text, "i"); | |
| return filterExpr.test(user.get('username')); | |
| }); | |
| }, | |
| byUsername: function(username) { | |
| return this.findWhere({ | |
| username: username | |
| }); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/users/helpers", function(exports, require, module) { | |
| var error_, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| error_ = require('lib/error'); | |
| module.exports = function(app) { | |
| var addPublicUser, addPublicUsers, adders, async, filterOutAlreadyThere, ref, searchByPosition, searchByText, sync; | |
| sync = { | |
| getUserModelFromUserId: function(id) { | |
| var userModel; | |
| if (id === app.user.id) { | |
| return app.user; | |
| } | |
| userModel = app.users.byId(id); | |
| if (userModel != null) { | |
| return userModel; | |
| } else { | |
| } | |
| }, | |
| getUserIdFromUsername: function(username) { | |
| var userModel; | |
| if (username === app.user.get('username')) { | |
| return app.user.id; | |
| } | |
| userModel = app.users.findWhere({ | |
| username: username | |
| }); | |
| if (userModel != null) { | |
| return userModel.id; | |
| } else { | |
| return console.warn("couldnt find the user from username: " + username); | |
| } | |
| }, | |
| isMainUser: function(userId) { | |
| if (userId != null) { | |
| return userId === app.user.id; | |
| } | |
| }, | |
| isFriend: function(userId) { | |
| var ref, ref1; | |
| if (!((userId != null) && (((ref = app.users) != null ? (ref1 = ref.friends) != null ? ref1.list : void 0 : void 0) != null))) { | |
| _.warn(userId, 'isFriend isnt ready (use or recalculate after data waiters)'); | |
| return false; | |
| } | |
| return indexOf.call(app.users.friends.list, userId) >= 0; | |
| }, | |
| isPublicUser: function(userId) { | |
| var ref, ref1; | |
| if (sync.isMainUser(userId)) { | |
| return false; | |
| } | |
| if (!app.user.loggedIn) { | |
| return true; | |
| } | |
| if (!((userId != null) && (((ref = app.users) != null ? (ref1 = ref["public"]) != null ? ref1.list : void 0 : void 0) != null))) { | |
| _.warn(userId, 'isPublicUser isnt ready (use or recalculate after data waiters)'); | |
| return true; | |
| } | |
| return indexOf.call(app.users["public"].list, userId) >= 0; | |
| }, | |
| itemsFetched: function(userModel) { | |
| if (!_.isModel(userModel)) { | |
| throw error_["new"]('itemsFetched expected a model', userModel); | |
| } | |
| return userModel.itemsFetched === true; | |
| }, | |
| getNonFriendsIds: function(usersIds) { | |
| _.type(usersIds, 'array'); | |
| return _(usersIds).chain().without(app.user.id).reject(sync.isFriend).value(); | |
| } | |
| }; | |
| async = { | |
| getUsersData: function(ids) { | |
| if (!(ids.length > 0)) { | |
| return _.preq.resolve([]); | |
| } | |
| return app.request('waitForData').then(function() { | |
| return app.users.data.local.get(ids, 'collection'); | |
| }).then(function(users) { | |
| var compacted, missingIds; | |
| compacted = _.compact(users); | |
| if (compacted.length !== ids.length) { | |
| missingIds = _.difference(ids, compacted.map(_.property('_id'))); | |
| _.warn(missingIds, 'getUsersData missing ids'); | |
| } | |
| return compacted; | |
| }).then(addPublicUsers); | |
| }, | |
| getUserModel: function(id, category) { | |
| if (category == null) { | |
| category = 'public'; | |
| } | |
| return app.request('waitForData').then(function() { | |
| var userModel; | |
| userModel = app.request('get:userModel:from:userId', id); | |
| if (userModel != null) { | |
| return userModel; | |
| } else { | |
| return app.users.data.local.get(id, 'collection').then(function(usersData) { | |
| if (usersData.length !== 1) { | |
| throw new Error("user not found: " + id); | |
| } | |
| return adders[category](usersData)[0]; | |
| }); | |
| } | |
| })["catch"](_.ErrorRethrow('getUserModel err')); | |
| }, | |
| getGroupUserModel: function(id) { | |
| return async.getUserModel(id, 'nonRelationGroupUser'); | |
| }, | |
| resolveToUserModel: function(user) { | |
| var username; | |
| if (_.isModel(user)) { | |
| return _.preq.resolve(user); | |
| } else { | |
| username = user; | |
| return app.request('get:userModel:from:username', username).then(function(userModel) { | |
| if (userModel != null) { | |
| return userModel; | |
| } else { | |
| throw new Error("user model not found: " + user); | |
| } | |
| }); | |
| } | |
| }, | |
| getUserModelFromUsername: function(username) { | |
| var userModel; | |
| if (username === app.user.get('username')) { | |
| return _.preq.resolve(app.user); | |
| } | |
| userModel = app.users.findWhere({ | |
| username: username | |
| }); | |
| if (userModel != null) { | |
| return _.preq.resolve(userModel); | |
| } else { | |
| return app.users.data.remote.findOneByUsername(username).then(function(user) { | |
| if (user != null) { | |
| userModel = app.users["public"].add(user); | |
| return userModel; | |
| } | |
| }); | |
| } | |
| } | |
| }; | |
| filterOutAlreadyThere = function(users) { | |
| var current; | |
| current = app.users.list(); | |
| current.push(app.user.id); | |
| return users.filter(function(user) { | |
| var ref; | |
| return !(ref = user._id, indexOf.call(current, ref) >= 0); | |
| }); | |
| }; | |
| addPublicUsers = function(users) { | |
| var allUsersIds; | |
| allUsersIds = users.map(_.property('_id')); | |
| users = filterOutAlreadyThere(_.forceArray(users)); | |
| app.users["public"].add(users); | |
| return app.users.byIds(allUsersIds); | |
| }; | |
| addPublicUser = function(user) { | |
| var _id, knownUser; | |
| _id = user._id; | |
| knownUser = app.users.byId(_id); | |
| if (knownUser != null) { | |
| return knownUser; | |
| } else { | |
| return app.users["public"].add(user); | |
| } | |
| }; | |
| adders = { | |
| "public": addPublicUsers, | |
| nonRelationGroupUser: app.users.nonRelationGroupUser.add.bind(app.users.nonRelationGroupUser) | |
| }; | |
| ref = require('./lib/search')(app), searchByText = ref.searchByText, searchByPosition = ref.searchByPosition; | |
| app.reqres.setHandlers({ | |
| 'get:user:model': async.getUserModel, | |
| 'get:group:user:model': async.getGroupUserModel, | |
| 'get:users:data': async.getUsersData, | |
| 'resolve:to:userModel': async.resolveToUserModel, | |
| 'get:userModel:from:username': async.getUserModelFromUsername, | |
| 'get:userModel:from:userId': sync.getUserModelFromUserId, | |
| 'get:userId:from:username': sync.getUserIdFromUsername, | |
| 'get:non:friends:ids': sync.getNonFriendsIds, | |
| 'user:isMainUser': sync.isMainUser, | |
| 'user:isFriend': sync.isFriend, | |
| 'user:isPublicUser': sync.isPublicUser, | |
| 'user:itemsFetched': sync.itemsFetched, | |
| 'users:search': searchByText, | |
| 'users:search:byPosition': searchByPosition, | |
| 'user:public:add': addPublicUser | |
| }); | |
| app.commands.setHandlers({ | |
| 'users:public:add': addPublicUsers | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/users/invitations", function(exports, require, module) { | |
| module.exports = function(app, _) { | |
| var invitationsByEmails; | |
| invitationsByEmails = function(emails, message) { | |
| var tracker; | |
| return tracker = _.preq.post(app.API.invitations, { | |
| action: 'by-emails', | |
| emails: emails, | |
| message: message | |
| }).then(function(data) { | |
| app.execute('track:invitation', 'email', data.emails.length); | |
| return data; | |
| }); | |
| }; | |
| app.reqres.setHandlers({ | |
| 'invitations:by:emails': invitationsByEmails | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/users/lib/remote_queries", function(exports, require, module) { | |
| module.exports = function(app, _) { | |
| return { | |
| get: function(ids) { | |
| return _.preq.get(app.API.users.data(ids))["catch"](_.Error('users_data get err')); | |
| }, | |
| search: function(text) { | |
| if (_.isEmpty(text)) { | |
| return _.preq.resolve([]); | |
| } | |
| return _.preq.get(app.API.users.search(text)).then(_.property('users'))["catch"](_.Error('users_data search err')); | |
| }, | |
| findOneByUsername: function(username) { | |
| return this.search(username).then(function(res) { | |
| var user; | |
| user = res != null ? res[0] : void 0; | |
| if ((user != null ? user.username.toLowerCase() : void 0) === username.toLowerCase()) { | |
| return user; | |
| } | |
| }); | |
| }, | |
| searchByPosition: function(latLng) { | |
| return _.preq.get(app.API.users.searchByPosition(latLng)).then(_.property('users'))["catch"](_.Error('searchByPosition err')); | |
| } | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/users/lib/search", function(exports, require, module) { | |
| module.exports = function(app) { | |
| var API, addUsersUnlessHere, searchByPosition, searchByText; | |
| app.users.queried = []; | |
| searchByText = function(text) { | |
| if (!_.isNonEmptyString(text)) { | |
| return app.users.filtered.friends(); | |
| } | |
| return app.users.data.remote.search(text).then(addUsersUnlessHere).then(function() { | |
| app.users.queried.push(text); | |
| return app.users.filtered.filterByText(text); | |
| }); | |
| }; | |
| searchByPosition = function(bbox) { | |
| return app.users.data.remote.searchByPosition(bbox).then(addUsersUnlessHere); | |
| }; | |
| addUsersUnlessHere = function(users) { | |
| return app.request('waitForData').then(function() { | |
| return app.execute('users:public:add', users); | |
| }); | |
| }; | |
| return API = { | |
| searchByText: searchByText, | |
| searchByPosition: searchByPosition | |
| }; | |
| }; | |
| }); | |
| ;require.register("modules/users/models/user", function(exports, require, module) { | |
| var UserCommons, highlightRescentlyUpdated, map_; | |
| UserCommons = require('./user_commons'); | |
| map_ = require('modules/map/lib/map'); | |
| module.exports = UserCommons.extend({ | |
| isMainUser: false, | |
| initialize: function() { | |
| this.setPathname(); | |
| if (this.hasPosition()) { | |
| this.listenTo(app.user, 'change:position', this.calculateDistance.bind(this)); | |
| this.calculateDistance(); | |
| } | |
| return this.listenToOnce(app.vent, 'friends:items:ready', this.calculateHighlightScore.bind(this)); | |
| }, | |
| serializeData: function() { | |
| var attrs, relationStatus; | |
| attrs = this.toJSON(); | |
| attrs.cid = this.cid; | |
| relationStatus = attrs.status; | |
| attrs[relationStatus] = true; | |
| if (relationStatus === 'nonRelationGroupUser') { | |
| attrs["public"] = true; | |
| } | |
| attrs.inventoryLength = this.inventoryLength(); | |
| return attrs; | |
| }, | |
| inventoryLength: function() { | |
| if (this.itemsFetched) { | |
| return app.request('inventory:user:length', this.id); | |
| } | |
| }, | |
| calculateDistance: function() { | |
| var a, b, distance, precision; | |
| if (!(app.user.has('position') && this.has('position'))) { | |
| return; | |
| } | |
| a = app.user.get('position'); | |
| b = this.get('position'); | |
| distance = this.kmDistanceFormMainUser = map_.distanceBetween(a, b); | |
| precision = distance > 20 ? 0 : 1; | |
| this.distanceFromMainUser = Number(distance.toFixed(precision)).toLocaleString(); | |
| }, | |
| calculateHighlightScore: function() { | |
| var distanceFactor, itemsAgeFactor, points, randomFactor, userItems; | |
| userItems = app.request('inventory:user:items', this.id); | |
| if (!(userItems.length > 0)) { | |
| return 0; | |
| } | |
| itemsAgeFactor = userItems.map(highlightRescentlyUpdated).sum(); | |
| distanceFactor = this.kmDistanceFormMainUser != null ? 10 / this.kmDistanceFormMainUser : 0; | |
| randomFactor = Math.random() * 0.1; | |
| points = itemsAgeFactor + distanceFactor + randomFactor; | |
| return this.set('highlightScore', -points); | |
| } | |
| }); | |
| highlightRescentlyUpdated = function(item) { | |
| var daysAgo, updateTime; | |
| updateTime = item.get('updated') || item.get('created'); | |
| daysAgo = _.daysAgo(updateTime); | |
| return 1 / (Math.pow(daysAgo, 2) + 1); | |
| }; | |
| }); | |
| ;require.register("modules/users/models/user_commons", function(exports, require, module) { | |
| var Positionable; | |
| Positionable = require('modules/general/models/positionable'); | |
| module.exports = Positionable.extend({ | |
| setPathname: function() { | |
| var username; | |
| username = this.get('username'); | |
| return this.set('pathname', "/inventory/" + username); | |
| }, | |
| asMatchable: function() { | |
| return [this.get('username'), this.get('bio')]; | |
| }, | |
| updateMetadata: function() { | |
| return app.execute('metadata:update', { | |
| title: this.get('username'), | |
| description: this.getDescription(), | |
| image: this.get('picture'), | |
| url: this.get('pathname') | |
| }); | |
| }, | |
| getDescription: function() { | |
| var bio; | |
| bio = this.get('bio'); | |
| if (_.isNonEmptyString(bio)) { | |
| return bio; | |
| } else { | |
| return _.i18n('user_default_description', { | |
| username: this.get('username') | |
| }); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/users/plugins/relations_actions", function(exports, require, module) { | |
| var behaviorsPlugin, confirmAction, confirmUnfriend, events, handlers; | |
| behaviorsPlugin = require('modules/general/plugins/behaviors'); | |
| events = { | |
| 'click .cancel': 'cancel', | |
| 'click .discard': 'discard', | |
| 'click .accept': 'accept', | |
| 'click .request': 'send', | |
| 'click .unfriend': 'unfriend', | |
| 'click .invite': 'invite', | |
| 'click .acceptRequest': 'acceptRequest', | |
| 'click .refuseRequest': 'refuseRequest', | |
| 'click .makeAdmin': 'makeAdmin', | |
| 'click .kick': 'kick' | |
| }; | |
| confirmAction = function(actionLabel, actionFn, warningText) { | |
| var confirmationText; | |
| confirmationText = _.I18n(actionLabel + "_confirmation", { | |
| username: this.model.get('username') | |
| }); | |
| return this.$el.trigger('askConfirmation', { | |
| confirmationText: confirmationText, | |
| warningText: warningText, | |
| action: actionFn | |
| }); | |
| }; | |
| confirmUnfriend = function() { | |
| return confirmAction.call(this, 'unfriend', app.request.bind(app, 'unfriend', this.model)); | |
| }; | |
| handlers = { | |
| cancel: function() { | |
| return app.request('request:cancel', this.model); | |
| }, | |
| discard: function() { | |
| return app.request('request:discard', this.model); | |
| }, | |
| accept: function() { | |
| return app.request('request:accept', this.model); | |
| }, | |
| send: function() { | |
| if (app.request('require:loggedIn', this.model.get('pathname'))) { | |
| return app.request('request:send', this.model); | |
| } | |
| }, | |
| unfriend: confirmUnfriend, | |
| invite: function() { | |
| if (this.group == null) { | |
| return _.error('inviteUser err: group is missing'); | |
| } | |
| return this.group.inviteUser(this.model)["catch"](behaviorsPlugin.Fail.call(this, 'invite user')); | |
| }, | |
| acceptRequest: function() { | |
| if (this.group == null) { | |
| return _.error('acceptRequest err: group is missing'); | |
| } | |
| return this.group.acceptRequest(this.model)["catch"](behaviorsPlugin.Fail.call(this, 'accept user request')); | |
| }, | |
| refuseRequest: function() { | |
| if (this.group == null) { | |
| return _.error('refuseRequest err: group is missing'); | |
| } | |
| return this.group.refuseRequest(this.model)["catch"](behaviorsPlugin.Fail.call(this, 'refuse user request')); | |
| }, | |
| makeAdmin: function() { | |
| var actionFn, warningText; | |
| if (this.group == null) { | |
| return _.error('makeAdmin err: group is missing'); | |
| } | |
| actionFn = this.group.makeAdmin.bind(this.group, this.model); | |
| warningText = _.I18n('group_make_admin_warning'); | |
| return confirmAction.call(this, 'group_make_admin', actionFn, warningText); | |
| }, | |
| kick: function() { | |
| var actionFn; | |
| if (this.group == null) { | |
| return _.error('kick err: group is missing'); | |
| } | |
| actionFn = this.group.kick.bind(this.group, this.model); | |
| return confirmAction.call(this, 'group_kick', actionFn); | |
| } | |
| }; | |
| module.exports = _.BasicPlugin(events, handlers); | |
| }); | |
| ;require.register("modules/users/requests", function(exports, require, module) { | |
| module.exports = function(app, _) { | |
| var API, Rewind, action, normalizeUser, server; | |
| server = { | |
| request: function(userId) { | |
| return this.base('request', userId); | |
| }, | |
| cancel: function(userId) { | |
| return this.base('cancel', userId); | |
| }, | |
| accept: function(userId) { | |
| return this.base('accept', userId); | |
| }, | |
| discard: function(userId) { | |
| return this.base('discard', userId); | |
| }, | |
| unfriend: function(userId) { | |
| return this.base('unfriend', userId); | |
| }, | |
| base: function(action, userId) { | |
| return _.preq.post(app.API.relations, { | |
| action: action, | |
| user: userId | |
| }); | |
| } | |
| }; | |
| action = function(user, action, newStatus, label) { | |
| var currentStatus, ref, userId; | |
| ref = normalizeUser(user), user = ref[0], userId = ref[1]; | |
| currentStatus = user.get('status'); | |
| user.set('status', newStatus); | |
| return server[action](userId).then(_.Tap(app.execute.bind(app, 'track:friend', action)))["catch"](Rewind(user, currentStatus, 'action err')); | |
| }; | |
| Rewind = function(user, currentStatus, label) { | |
| var handler; | |
| return handler = function(err) { | |
| user.set('status', currentStatus); | |
| return _.error(err, 'action'); | |
| }; | |
| }; | |
| API = { | |
| sendRequest: function(user) { | |
| return action(user, 'request', 'userRequested'); | |
| }, | |
| cancelRequest: function(user) { | |
| return action(user, 'cancel', 'public'); | |
| }, | |
| acceptRequest: function(user, showUserInvetory) { | |
| if (showUserInvetory == null) { | |
| showUserInvetory = true; | |
| } | |
| action(user, 'accept', 'friends'); | |
| if (showUserInvetory) { | |
| return app.execute('show:inventory:user', user); | |
| } | |
| }, | |
| discardRequest: function(user) { | |
| return action(user, 'discard', 'public'); | |
| }, | |
| unfriend: function(user) { | |
| var ref, userId; | |
| ref = normalizeUser(user), user = ref[0], userId = ref[1]; | |
| app.execute('inventory:remove:user:items', userId); | |
| return action(user, 'unfriend', 'public'); | |
| } | |
| }; | |
| normalizeUser = function(user) { | |
| if (!_.isModel(user)) { | |
| throw new Error('exepected a user Model, got', user); | |
| } | |
| if (user.id != null) { | |
| return [user, user.id]; | |
| } else { | |
| throw new Error('user missing id', user); | |
| } | |
| }; | |
| app.reqres.setHandlers({ | |
| 'request:send': API.sendRequest, | |
| 'request:cancel': API.cancelRequest, | |
| 'request:accept': API.acceptRequest, | |
| 'request:discard': API.discardRequest, | |
| 'unfriend': API.unfriend | |
| }); | |
| }; | |
| }); | |
| ;require.register("modules/users/users", function(exports, require, module) { | |
| var addUser, fetchFriendItems, fetchFriendsAndTheirItems, fetchItemsOnNewFriend, fetchRelationsDataSuccess, initUsersItems, possiblyInGroups, removeContactItems, spreadRelationsData, usersReady, | |
| indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | |
| module.exports = { | |
| define: function(module, app, Backbone, Marionette, $, _) {}, | |
| initialize: function() { | |
| app.users = require('./users_collections')(app); | |
| app.users.data = require('./users_data')(app, $, _); | |
| require('./helpers')(app); | |
| require('./requests')(app, _); | |
| require('./invitations')(app, _); | |
| initUsersItems(); | |
| return app.request('waitForUserData').then(fetchFriendsAndTheirItems); | |
| } | |
| }; | |
| initUsersItems = function() { | |
| return app.commands.setHandlers({ | |
| 'show:user': function(username) { | |
| return app.execute('show:inventory:user', username); | |
| }, | |
| 'friend:fetchItems': fetchFriendItems | |
| }); | |
| }; | |
| fetchFriendsAndTheirItems = function() { | |
| if (!app.user.loggedIn) { | |
| return usersReady(); | |
| } | |
| return app.users.data.fetchRelationsData().then(fetchRelationsDataSuccess)["catch"](_.Error('fetchFriendsAndTheirItems err')); | |
| }; | |
| fetchRelationsDataSuccess = function(relationsData) { | |
| var friends, nonRelationGroupUser, ref; | |
| ref = relationsData.lists, friends = ref.friends, nonRelationGroupUser = ref.nonRelationGroupUser; | |
| if (friends.length === 0 && nonRelationGroupUser.length === 0) { | |
| app.execute('friends:zero'); | |
| } | |
| spreadRelationsData(relationsData); | |
| usersReady(); | |
| return fetchItemsOnNewFriend(); | |
| }; | |
| usersReady = function() { | |
| app.users.fetched = true; | |
| app.vent.trigger('users:ready'); | |
| }; | |
| spreadRelationsData = function(relationsData) { | |
| var inGroups, lists, results, status, userData, usersData; | |
| lists = relationsData.lists, inGroups = relationsData.inGroups; | |
| results = []; | |
| for (status in lists) { | |
| usersData = lists[status]; | |
| results.push((function() { | |
| var i, len, results1; | |
| results1 = []; | |
| for (i = 0, len = usersData.length; i < len; i++) { | |
| userData = usersData[i]; | |
| results1.push(addUser(inGroups, status, userData)); | |
| } | |
| return results1; | |
| })()); | |
| } | |
| return results; | |
| }; | |
| addUser = function(inGroups, status, user) { | |
| var ref, userModel; | |
| userModel = app.users[status].add(user); | |
| if (indexOf.call(possiblyInGroups, status) >= 0) { | |
| if (ref = userModel.id, indexOf.call(inGroups[status], ref) < 0) { | |
| userModel.itemsFetched = false; | |
| return; | |
| } | |
| } | |
| userModel.itemsFetched = true; | |
| return app.execute('friend:fetchItems', userModel); | |
| }; | |
| possiblyInGroups = ['userRequested', 'otherRequested']; | |
| fetchItemsOnNewFriend = function() { | |
| return app.users.friends.on('add', function(friend) { | |
| app.execute('friend:fetchItems', friend); | |
| return app.request('show:inventory:user', friend); | |
| }); | |
| }; | |
| fetchFriendItems = function(userModel) { | |
| return Items.friends.fetchFriendItems(userModel); | |
| }; | |
| removeContactItems = function() { | |
| return Items.friends.remove(Items.friends.where({ | |
| owner: this.id | |
| })); | |
| }; | |
| }); | |
| ;require.register("modules/users/users_collections", function(exports, require, module) { | |
| var Users, keepMembersListUpdated; | |
| Users = require('./collections/users'); | |
| module.exports = function(app) { | |
| var subCollections, users; | |
| users = new Users; | |
| subCollections = ['public', 'friends', 'userRequested', 'otherRequested', 'nonRelationGroupUser']; | |
| subCollections.forEach(function(status) { | |
| var setStatus; | |
| users[status] = new FilteredCollection(users); | |
| users[status].filterBy({ | |
| status: status | |
| }); | |
| users[status].filtered = new FilteredCollection(users[status]); | |
| setStatus = function(userData) { | |
| return userData.status = status; | |
| }; | |
| return users[status].add = function(data) { | |
| if (_.isArray(data)) { | |
| data.forEach(setStatus); | |
| } else { | |
| setStatus(data); | |
| } | |
| return users.add(data); | |
| }; | |
| }); | |
| users.filtered = new FilteredCollection(users); | |
| users.filtered.friends = function() { | |
| this.resetFilters(); | |
| return this.filterBy({ | |
| status: 'friends' | |
| }); | |
| }; | |
| keepMembersListUpdated(users.friends); | |
| keepMembersListUpdated(users["public"]); | |
| users.list = function() { | |
| return users.map(_.property('id')).concat([app.user.id]); | |
| }; | |
| return users; | |
| }; | |
| keepMembersListUpdated = function(collection) { | |
| var addMember, removeMember; | |
| collection.list = collection.map(function(member) { | |
| return member.id; | |
| }); | |
| addMember = function(model) { | |
| return collection.list.push(model.id); | |
| }; | |
| removeMember = function(model) { | |
| return collection.list = _.without(collection.list, model.id); | |
| }; | |
| collection.on('add', addMember); | |
| return collection.on('remove', removeMember); | |
| }; | |
| }); | |
| ;require.register("modules/users/users_data", function(exports, require, module) { | |
| var concatGroupIds, extractGroupsIds; | |
| module.exports = function(app, $, _) { | |
| var data, fetchRelationsData, inGroupsNonFriendsRelations, localData, remote, spreadRelationsData; | |
| remote = require('./lib/remote_queries')(app, _); | |
| localData = new app.LocalCache({ | |
| name: 'users', | |
| remote: remote, | |
| parseData: _.property('users') | |
| }); | |
| fetchRelationsData = function() { | |
| var groups, groupsIds, inGroups, networkIds, ref, relations, relationsIds; | |
| ref = app.user, relations = ref.relations, groups = ref.groups; | |
| if (!((relations != null) || (groups != null))) { | |
| return _.preq.reject('no relations found at fetchRelationsData'); | |
| } | |
| relationsIds = _.allValues(relations); | |
| groupsIds = extractGroupsIds(groups); | |
| relations.nonRelationGroupUser = _.difference(groupsIds, relationsIds); | |
| inGroups = inGroupsNonFriendsRelations(relations, groupsIds); | |
| networkIds = _.union(relationsIds, groupsIds); | |
| return localData.get(networkIds).then(spreadRelationsData.bind(null, relations, inGroups)); | |
| }; | |
| inGroupsNonFriendsRelations = function(relations, groupsIds) { | |
| return { | |
| userRequested: _.intersection(groupsIds, relations.userRequested), | |
| otherRequested: _.intersection(groupsIds, relations.otherRequested) | |
| }; | |
| }; | |
| spreadRelationsData = function(relations, inGroups, data) { | |
| var i, len, list, lists, relationType, relationsData, userData, userId; | |
| lists = { | |
| friends: [], | |
| userRequested: [], | |
| otherRequested: [], | |
| nonRelationGroupUser: [] | |
| }; | |
| for (relationType in relations) { | |
| list = relations[relationType]; | |
| for (i = 0, len = list.length; i < len; i++) { | |
| userId = list[i]; | |
| userData = data[userId]; | |
| lists[relationType].push(userData); | |
| } | |
| } | |
| return relationsData = { | |
| lists: lists, | |
| inGroups: inGroups | |
| }; | |
| }; | |
| return data = { | |
| remote: remote, | |
| local: localData, | |
| fetchRelationsData: fetchRelationsData | |
| }; | |
| }; | |
| extractGroupsIds = function(groups) { | |
| return _.chain(groups.models).map(concatGroupIds).flatten().uniq().without(app.user.id).value(); | |
| }; | |
| concatGroupIds = function(group) { | |
| return group.allMembersIds(); | |
| }; | |
| }); | |
| ;require.register("modules/users/views/no_user", function(exports, require, module) { | |
| var links; | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'li', | |
| className: 'text-center hidden', | |
| template: require('./templates/no_user'), | |
| initialize: function() { | |
| return this.getLink(); | |
| }, | |
| getLink: function() { | |
| var link; | |
| link = this.options.link; | |
| if (link != null) { | |
| return this.link = links[link]; | |
| } | |
| }, | |
| onShow: function() { | |
| return this.$el.fadeIn(); | |
| }, | |
| serializeData: function() { | |
| return { | |
| message: this.options.message || "can't find anyone with that name", | |
| link: this.link | |
| }; | |
| }, | |
| events: { | |
| 'click .linkAction': 'triggerLinkAction' | |
| }, | |
| triggerLinkAction: function() { | |
| return this.link.action(); | |
| } | |
| }); | |
| links = { | |
| inviteFriends: { | |
| text: 'invite friends', | |
| href: '/network/users/invite', | |
| action: function() { | |
| return app.execute('show:network', 'invite'); | |
| } | |
| } | |
| }; | |
| }); | |
| ;require.register("modules/users/views/templates/no_user", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=container.escapeExpression; | |
| return " - \n <a href=\"" | |
| + alias1(container.lambda(((stack1 = (depth0 != null ? depth0.link : depth0)) != null ? stack1.href : stack1), depth0)) | |
| + "\" class=\"linkAction\">" | |
| + alias1((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},((stack1 = (depth0 != null ? depth0.link : depth0)) != null ? stack1.text : stack1),{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<p class=\"grey noUser\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,(depth0 != null ? depth0.message : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.link : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + "</p>\n\n<p class=\"white findFriends hidden\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"find friends to share your inventory with!",{"name":"i18n","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-down",{"name":"icon","hash":{},"data":data})) | |
| + "\n</p>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/users/views/templates/user_li", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.picture : depth0),80,{"name":"src","hash":{},"data":data})); | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return container.escapeExpression((helpers.src || (depth0 && depth0.src) || helpers.helperMissing).call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.picture : depth0),48,{"name":"src","hash":{},"data":data})); | |
| },"5":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " <span class=\"email\">" | |
| + container.escapeExpression(((helper = (helper = helpers.email || (depth0 != null ? depth0.email : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"email","hash":{},"data":data}) : helper))) | |
| + "</span>\n"; | |
| },"7":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.inventoryLength : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"8":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <span class=\"inventoryLength short serif\">" | |
| + alias3(((helper = (helper = helpers.inventoryLength || (depth0 != null ? depth0.inventoryLength : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"inventoryLength","hash":{},"data":data}) : helper))) | |
| + "</span>\n <span class=\"inventoryLength long serif\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"num_books",(depth0 != null ? depth0.inventoryLength : depth0),{"name":"i18n","hash":{},"data":data})) | |
| + "</span>\n"; | |
| },"10":function(container,depth0,helpers,partials,data) { | |
| var stack1; | |
| return ((stack1 = helpers["if"].call(depth0 != null ? depth0 : {},(depth0 != null ? depth0.bio : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : ""); | |
| },"11":function(container,depth0,helpers,partials,data) { | |
| var helper; | |
| return " <div class=\"details\">\n <p class=\"bio user-content\">" | |
| + container.escapeExpression(((helper = (helper = helpers.bio || (depth0 != null ? depth0.bio : depth0)) != null ? helper : helpers.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},{"name":"bio","hash":{},"data":data}) : helper))) | |
| + "</p>\n </div>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3="function", alias4=container.escapeExpression; | |
| return "<div class=\"left-box\">\n <a class=\"select\" href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" title=\"" | |
| + alias4(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + "\">\n <img class=\"profilePic\" alt=\"" | |
| + alias4(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + "\"\n src=\"" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.stretch : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") | |
| + "\">\n </a>\n</div>\n<div class=\"right-box\">\n <a class=\"select\" href=\"" | |
| + alias4(((helper = (helper = helpers.pathname || (depth0 != null ? depth0.pathname : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"pathname","hash":{},"data":data}) : helper))) | |
| + "\" title=\"" | |
| + alias4(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + "\">\n <div class=\"top\">\n <span class=\"username serif\">" | |
| + alias4(((helper = (helper = helpers.username || (depth0 != null ? depth0.username : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"username","hash":{},"data":data}) : helper))) | |
| + "</span>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.showEmail : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers.unless.call(alias1,(depth0 != null ? depth0.groupContext : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </div>\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.stretch : depth0),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " </a>\n " | |
| + alias4((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"inventory/side_nav:user_menu",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</div>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/users/views/user_li", function(exports, require, module) { | |
| var relationsActions; | |
| relationsActions = require('../plugins/relations_actions'); | |
| module.exports = Marionette.ItemView.extend({ | |
| tagName: 'li', | |
| template: require('./templates/user_li'), | |
| className: function() { | |
| var classes, groupContext, status, stretch; | |
| classes = "userLi"; | |
| status = this.model.get('status') || 'noStatus'; | |
| stretch = this.options.stretch ? 'stretch' : ''; | |
| groupContext = this.options.groupContext ? 'group-context' : ''; | |
| return "userLi " + status + " " + stretch + " " + groupContext; | |
| }, | |
| behaviors: { | |
| PreventDefault: {}, | |
| ConfirmationModal: {}, | |
| SuccessCheck: {} | |
| }, | |
| events: { | |
| 'click .select, .select-2': 'selectUser' | |
| }, | |
| initialize: function() { | |
| this.group = this.options.group; | |
| this.groupContext = this.options.groupContext; | |
| this.initPlugins(); | |
| this.lazyRender = _.debounce(this.render, 200); | |
| this.listenTo(this.model, 'change', this.lazyRender); | |
| this.listenTo(this.model, 'group:user:change', this.lazyRender); | |
| return this.listenTo(app.vent, "inventory:" + this.model.id + ":change", this.lazyRender); | |
| }, | |
| initPlugins: function() { | |
| return relationsActions.call(this); | |
| }, | |
| onShow: function() { | |
| return app.execute('foundation:reload'); | |
| }, | |
| serializeData: function() { | |
| var attrs, nonPrivateInventoryLength; | |
| nonPrivateInventoryLength = true; | |
| attrs = this.model.serializeData(nonPrivateInventoryLength); | |
| attrs.showEmail = this.options.showEmail; | |
| attrs.stretch = this.options.stretch; | |
| if (this.groupContext) { | |
| return this.attachGroupsAttributes(attrs); | |
| } else { | |
| return attrs; | |
| } | |
| }, | |
| attachGroupsAttributes: function(attrs) { | |
| var groupStatus, userId; | |
| attrs.groupContext = true; | |
| groupStatus = this.group.userStatus(this.model); | |
| attrs[groupStatus] = true; | |
| userId = this.model.id; | |
| if (this.group.userIsAdmin(userId)) { | |
| attrs.admin = true; | |
| } | |
| attrs.mainUserIsAdmin = this.group.mainUserIsAdmin(); | |
| return attrs; | |
| }, | |
| selectUser: function(e) { | |
| if (!_.isOpenedOutside(e)) { | |
| return app.execute('show:inventory:user', this.model); | |
| } | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/users/views/users_list", function(exports, require, module) { | |
| module.exports = Marionette.CollectionView.extend({ | |
| tagName: 'ul', | |
| className: 'usersList', | |
| childView: require('./user_li'), | |
| childViewOptions: function() { | |
| return { | |
| groupContext: this.options.groupContext, | |
| group: this.options.group, | |
| showEmail: this.options.showEmail, | |
| stretch: this.options.stretch | |
| }; | |
| }, | |
| emptyView: require('./no_user'), | |
| emptyViewOptions: function() { | |
| return { | |
| message: this.options.emptyViewMessage, | |
| link: this.options.emptyViewLink | |
| }; | |
| }, | |
| initialize: function() { | |
| var filter, ref, textFilter; | |
| ref = this.options, filter = ref.filter, textFilter = ref.textFilter; | |
| if (filter != null) { | |
| this.filter = filter; | |
| } | |
| if (textFilter) { | |
| return this.on('filter:text', this.setTextFilter.bind(this)); | |
| } | |
| }, | |
| onShow: function() { | |
| return app.execute('foundation:reload'); | |
| }, | |
| setTextFilter: function(text) { | |
| this.filter = function(model) { | |
| return model.matches(text); | |
| }; | |
| return this.render(); | |
| } | |
| }); | |
| }); | |
| ;require.register("modules/welcome/lib/show_last_public_items", function(exports, require, module) { | |
| var FetchMore, Items, ItemsList, addUsersAndItems, lastPublicItems; | |
| Items = require('modules/inventory/collections/items'); | |
| ItemsList = require('modules/inventory/views/items_list'); | |
| addUsersAndItems = require('modules/inventory/lib/add_users_and_items'); | |
| lastPublicItems = app.API.items.lastPublicItems; | |
| module.exports = function(params) { | |
| var allowMore, assertImage, collection, fetchMore, limit, more, moreData, region; | |
| region = params.region, allowMore = params.allowMore, limit = params.limit, assertImage = params.assertImage; | |
| collection = new Items; | |
| moreData = { | |
| status: true | |
| }; | |
| more = function() { | |
| return moreData.status; | |
| }; | |
| fetchMore = FetchMore(collection, moreData, limit, assertImage); | |
| return fetchMore().then(function() { | |
| return region.show(new ItemsList({ | |
| collection: collection, | |
| fetchMore: allowMore ? fetchMore : void 0, | |
| more: allowMore ? more : void 0, | |
| showDistance: true | |
| })); | |
| }); | |
| }; | |
| FetchMore = function(collection, moreData, limit, assertImage) { | |
| var busy, catch404, fetchMore; | |
| busy = false; | |
| fetchMore = function() { | |
| var offset; | |
| if (busy) { | |
| return _.preq.resolved; | |
| } | |
| busy = true; | |
| offset = collection.length; | |
| return _.preq.get(lastPublicItems(limit, offset, assertImage)).then(addUsersAndItems.bind(null, collection))["catch"](catch404)["finally"](function() { | |
| return busy = false; | |
| }); | |
| }; | |
| catch404 = function(err) { | |
| if (err.status === 404) { | |
| moreData.status = false; | |
| return _.warn('no more public items to show'); | |
| } else { | |
| throw err; | |
| } | |
| }; | |
| return fetchMore; | |
| }; | |
| }); | |
| ;require.register("modules/welcome/views/joyride_welcome_tour", function(exports, require, module) { | |
| var banner, closeHiddenParts, closeSmallScreenSettingsMenu, elMiddle, nubOffset, openHiddenParts, openSettingsMenu, openSmallScreenMenu, reflow, tipOptions, urls; | |
| urls = require('lib/urls'); | |
| banner = urls.images.banner; | |
| module.exports = Marionette.ItemView.extend({ | |
| template: require('./templates/joyride_welcome_tour'), | |
| onShow: function() { | |
| app.execute('foundation:joyride:start', { | |
| joyride: { | |
| expose: true, | |
| modal: false, | |
| pre_step_callback: openHiddenParts, | |
| post_step_callback: closeHiddenParts | |
| } | |
| }); | |
| return setTimeout(this.hackNubPositions.bind(this), 400); | |
| }, | |
| serializeData: function() { | |
| return { | |
| urls: urls, | |
| banner: banner, | |
| add: { | |
| pointer: _.smallScreen() ? 'addIconButton' : 'addIconButtonTop', | |
| options: tipOptions({ | |
| prev_button: false | |
| }) | |
| }, | |
| network: { | |
| pointer: _.smallScreen() ? 'networkIconButton' : 'networkIconButtonTop', | |
| options: tipOptions() | |
| } | |
| }; | |
| }, | |
| hackNubPositions: function() { | |
| var middle; | |
| if (_.smallScreen()) { | |
| middle = elMiddle('#addIconButton', '#networkIconButton'); | |
| $('.joyride-tip-guide[data-index="0"] .joyride-nub').css('margin-left', middle); | |
| middle = elMiddle('#networkIconButton', '#browseIconButton'); | |
| return $('.joyride-tip-guide[data-index="1"] .joyride-nub').css('margin-left', middle); | |
| } | |
| } | |
| }); | |
| nubOffset = 22; | |
| elMiddle = function(selector, next) { | |
| var end, start; | |
| start = $(selector).offset().left; | |
| end = $(next).offset().left; | |
| return (start + end) / 2 - nubOffset; | |
| }; | |
| tipOptions = function(options) { | |
| var base; | |
| if (options == null) { | |
| options = {}; | |
| } | |
| base = { | |
| tip_location: _.smallScreen() ? 'bottom' : 'right', | |
| tip_animation: 'fade' | |
| }; | |
| _.log(base, 'base'); | |
| return _.extend(base, options); | |
| }; | |
| openHiddenParts = function() { | |
| var id; | |
| id = this.$target[0].id; | |
| switch (id) { | |
| case 'searchField': | |
| return openSmallScreenMenu(); | |
| case 'editProfile': | |
| return openSettingsMenu(); | |
| } | |
| }; | |
| closeHiddenParts = function() { | |
| var id; | |
| id = this.$target[0].id; | |
| switch (id) { | |
| case 'editProfile': | |
| return closeSmallScreenSettingsMenu(); | |
| } | |
| }; | |
| openSmallScreenMenu = function() { | |
| return $('.menu-icon').trigger('click'); | |
| }; | |
| openSettingsMenu = function() { | |
| if (_.smallScreen()) { | |
| $('#settingsMenu').find('a').first().trigger('click'); | |
| return reflow(); | |
| } else { | |
| return $('#settingsMenu').trigger('click'); | |
| } | |
| }; | |
| closeSmallScreenSettingsMenu = function() { | |
| if (_.smallScreen()) { | |
| return $('#settingsMenu').find('.back').trigger('click'); | |
| } | |
| }; | |
| reflow = function() { | |
| return $(document).foundation('joyride', 'reflow'); | |
| }; | |
| }); | |
| ;require.register("modules/welcome/views/templates/credits", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<section id=\"credits\">\n <h5>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"assembled_by",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</h5>\n <p class=\"contributors\">\n <strong>" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"contributors",{"name":"I18n","hash":{},"data":data})) | |
| + ":</strong><br>\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Lucie","http://fuzzle.me",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"translation",{"name":"i18n","hash":{},"data":data})) | |
| + "-de)</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Allmende","http://allmende.io",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"analytics",{"name":"i18n","hash":{},"data":data})) | |
| + ")</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Albin Larsson","http://abbe98.github.io",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"code",{"name":"i18n","hash":{},"data":data})) | |
| + ")</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Wikidata contributors","https://wikidata.org",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"data",{"name":"i18n","hash":{},"data":data})) | |
| + ")</span>\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"req","https://www.transifex.com/user/profile/req",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"translation",{"name":"i18n","hash":{},"data":data})) | |
| + "-de)</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Benny Andersson","https://about.me/BennyAndersson",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"translation",{"name":"i18n","hash":{},"data":data})) | |
| + "-sv)</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"David Abián","http://davidabian.com/",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"translation",{"name":"i18n","hash":{},"data":data})) | |
| + "-es)</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Robert Wolniak","https://www.transifex.com/user/profile/Szkodnix",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"translation",{"name":"i18n","hash":{},"data":data})) | |
| + "-pl)</span>,\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Steffi","http://berlin.imwandel.net",{"name":"link","hash":{},"data":data})) | |
| + " <span class=\"domain\">(" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"translation",{"name":"i18n","hash":{},"data":data})) | |
| + "-de)</span>\n </p>\n <p>" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"open_source_credits",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n <p>\n " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"beautiful Creative Commons pictures by:",{"name":"I18n","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Sarah Buckley","https://www.flickr.com/photos/17207222@N02/6117998074",{"name":"link","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Luci Correia","https://www.flickr.com/photos/lucorreia/15171119938",{"name":"link","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Brittany Stevens","https://www.flickr.com/photos/brittanystevens/13947832357",{"name":"link","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"Ginny","https://www.flickr.com/photos/ginnerobot/3102623100",{"name":"link","hash":{},"data":data})) | |
| + "\n - " | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"thanks!",{"name":"I18n","hash":{},"data":data})) | |
| + "\n </p>\n\n</section>\n<section id=\"legals\">\n <p>" | |
| + alias3((helpers.link || (depth0 && depth0.link) || alias2).call(alias1,"contacts",((stack1 = (depth0 != null ? depth0.contact : depth0)) != null ? stack1.mailto : stack1),{"name":"link","hash":{},"data":data})) | |
| + "</p>\n</section>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/embedded_welcome", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <section id=\"embedded-welcome\">\n <div>\n <h2>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Welcome on Inventaire",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n <span class=\"tagline\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"the library of your friends and communities",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </span>\n </div>\n <a href=\"/welcome\" class=\"showWelcome button secondary bold radius\">\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"learn more",{"name":"i18n","hash":{},"data":data})) | |
| + "\n </a>\n </section>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, helper, options, buffer = ""; | |
| stack1 = ((helper = (helper = helpers.notLoggedIn || (depth0 != null ? depth0.notLoggedIn : depth0)) != null ? helper : helpers.helperMissing),(options={"name":"notLoggedIn","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data}),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : {},options) : helper)); | |
| if (!helpers.notLoggedIn) { stack1 = helpers.blockHelperMissing.call(depth0,stack1,options)} | |
| if (stack1 != null) { buffer += stack1; } | |
| return buffer; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_add", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h5>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"A book you want to share? Add it to your inventory!",{"name":"i18n","hash":{},"data":data})) | |
| + "</h5>\n<p>\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Search from here by title, author or book id (ISBN)",{"name":"i18n","hash":{},"data":data})) | |
| + " <br>\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"or just scan your books' barcode",{"name":"i18n","hash":{},"data":data})) | |
| + "\n</p>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_conclusion_one", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<img src=\"" | |
| + alias3((helpers.src || (depth0 && depth0.src) || alias2).call(alias1,(depth0 != null ? depth0.banner : depth0),400,{"name":"src","hash":{},"data":data})) | |
| + "\">\n<h5>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"you're all set to start exploring!",{"name":"i18n","hash":{},"data":data})) | |
| + "</h5>\n<p>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"joyride_last",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_conclusion_two", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<div id=\"conclusion\">\n <h5>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"joyride_last_conlusion_point_1",{"name":"i18n","hash":{},"data":data})) | |
| + "</h5>\n <h5>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"joyride_last_conlusion_point_2",{"name":"i18n","hash":{},"data":data})) | |
| + "</h5>\n</div>\n<div id=\"socialNetworks\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"social_networks",(depth0 != null ? depth0.urls : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n</div>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_network", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h5>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"who would you like to share books with?",{"name":"i18n","hash":{},"data":data})) | |
| + "</h5>\n<p>\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Search your friends in the current users or invite them to join!",{"name":"i18n","hash":{},"data":data})) | |
| + "\n " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"That's also the place where you can create groups.",{"name":"i18n","hash":{},"data":data})) | |
| + "\n</p>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_settings", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<h5>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"edit your settings",{"name":"i18n","hash":{},"data":data})) | |
| + "</h5>\n<p>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"switch to another language or change your profile picture from there",{"name":"i18n","hash":{},"data":data})) | |
| + "</p>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_tip", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<li data-button=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"times",{"name":"icon","hash":{},"data":data})) | |
| + "\" data-prev-text=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-left",{"name":"icon","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:joyride_conclusion",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</li>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/joyride_welcome_tour", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <li data-id=\"" | |
| + alias3(((helper = (helper = helpers.pointer || (depth0 != null ? depth0.pointer : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"pointer","hash":{},"data":data}) : helper))) | |
| + "\"\n data-text=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-right",{"name":"icon","hash":{},"data":data})) | |
| + "\"\n data-options=\"" | |
| + alias3((helpers.inlineOptions || (depth0 && depth0.inlineOptions) || alias2).call(alias1,(depth0 != null ? depth0.options : depth0),{"name":"inlineOptions","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:joyride_add",{"name":"partial","hash":{},"data":data})) | |
| + "\n </li>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| var helper, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return " <li data-id=\"" | |
| + alias3(((helper = (helper = helpers.pointer || (depth0 != null ? depth0.pointer : depth0)) != null ? helper : alias2),(typeof helper === "function" ? helper.call(alias1,{"name":"pointer","hash":{},"data":data}) : helper))) | |
| + "\" data-button=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-right",{"name":"icon","hash":{},"data":data})) | |
| + "\"\n data-prev-text=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-left",{"name":"icon","hash":{},"data":data})) | |
| + "\"\n data-options=\"" | |
| + alias3((helpers.inlineOptions || (depth0 && depth0.inlineOptions) || alias2).call(alias1,(depth0 != null ? depth0.options : depth0),{"name":"inlineOptions","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:joyride_network",{"name":"partial","hash":{},"data":data})) | |
| + "\n </li>\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<ol class=\"joyride-list\" data-joyride>\n" | |
| + ((stack1 = helpers["with"].call(alias1,(depth0 != null ? depth0.add : depth0),{"name":"with","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + ((stack1 = helpers["with"].call(alias1,(depth0 != null ? depth0.network : depth0),{"name":"with","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data})) != null ? stack1 : "") | |
| + " <li data-button=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-right",{"name":"icon","hash":{},"data":data})) | |
| + "\" data-prev-text=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-left",{"name":"icon","hash":{},"data":data})) | |
| + "\" data-options=\"tip_location:left;tip_animation:fade\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:joyride_conclusion_one",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </li>\n <li data-button=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"times",{"name":"icon","hash":{},"data":data})) | |
| + "\" data-prev-text=\"" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"arrow-left",{"name":"icon","hash":{},"data":data})) | |
| + "\">\n " | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:joyride_conclusion_two",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n </li>\n</ol>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/landing_screen", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"1":function(container,depth0,helpers,partials,data) { | |
| return " <a id=\"loginRequest\" class=\"button dark-grey\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"back to your inventory",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n"; | |
| },"3":function(container,depth0,helpers,partials,data) { | |
| return " " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"welcome:login_buttons",{"name":"partial","hash":{},"data":data})) | |
| + "\n"; | |
| },"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<section id=\"landingScreen\" class=\"text-center\">\n <div class=\"pusher\"></div>\n <div class=\"polyglotTitle\">\n <h2>" | |
| + ((stack1 = (helpers.Q || (depth0 && depth0.Q) || alias2).call(alias1,"Q815410",false,"Inventaire",{"name":"Q","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</h2>\n <h2 class=\"toggler\">Inventaire</h2>\n </div>\n <div class=\"pitch\">\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"keep an inventory of your books",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"share it with your friends and communities",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <h3>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"discover the books available in your network!",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n </div>\n <div id=\"loginButtons\">\n" | |
| + ((stack1 = helpers["if"].call(alias1,(depth0 != null ? depth0.loggedIn : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data})) != null ? stack1 : "") | |
| + " </div>\n <div class=\"pusher\"></div>\n</section>\n"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/last_public_books", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<section id=\"lastPublicBooks\">\n <h3 class=\"text-center\">" | |
| + container.escapeExpression((helpers.i18n || (depth0 && depth0.i18n) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"some of the last books published",{"name":"i18n","hash":{},"data":data})) | |
| + "</h3>\n <div id=\"previewColumns\"></div>\n</section>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/login_buttons", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<a id=\"signupRequest\" class=\"button secondary bold\" title=\"" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"sign up",{"name":"I18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"sign up",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>\n<a id=\"loginRequest\" class=\"button success bold\" title=\"" | |
| + alias3((helpers.I18n || (depth0 && depth0.I18n) || alias2).call(alias1,"login",{"name":"I18n","hash":{},"data":data})) | |
| + "\">" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"login",{"name":"i18n","hash":{},"data":data})) | |
| + "</a>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/mission", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var stack1, alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return "<section id=\"mission\">\n <a class='toggleMission'>\n <span class=\"pusher\"></span>\n <h2>" | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"our mission & values",{"name":"i18n","hash":{},"data":data})) | |
| + "</h2>\n " | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-down",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"chevron-up","hidden",{"name":"icon","hash":{},"data":data})) | |
| + "\n <span class=\"pusher\"></span>\n </a>\n <ul class=\"mission\">\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"random",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Empowering the Transition",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n <p class=\"capitalized\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pitch_transition",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n </li>\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"book",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Just Books. For now.",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n <p class=\"capitalized\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pitch_just_books",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n </li>\n <li id=\"middle-three\">\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"puzzle-piece",{"name":"icon","hash":{},"data":data})) | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Built on and for Open Knowledge",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n <p class=\"capitalized\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pitch_open_knowledge",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n </li>\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"gears",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"Built on and in Open Source",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n <p class=\"capitalized\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pitch_open_source",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n </li>\n <li>\n <h4>" | |
| + alias3((helpers.icon || (depth0 && depth0.icon) || alias2).call(alias1,"database",{"name":"icon","hash":{},"data":data})) | |
| + " " | |
| + alias3((helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"You own your data",{"name":"i18n","hash":{},"data":data})) | |
| + "</h4>\n <p class=\"capitalized\">" | |
| + ((stack1 = (helpers.i18n || (depth0 && depth0.i18n) || alias2).call(alias1,"pitch_your_data",{"name":"i18n","hash":{},"data":data})) != null ? stack1 : "") | |
| + "</p>\n </li>\n </ul>\n</section>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/social_networks", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| return "<section id=\"social-networks\">\n " | |
| + container.escapeExpression((helpers.partial || (depth0 && depth0.partial) || helpers.helperMissing).call(depth0 != null ? depth0 : {},"social_networks",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n</section>"; | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/templates/welcome", function(exports, require, module) { | |
| var __templateData = Handlebars.template({"compiler":[7,">= 4.0.0"],"main":function(container,depth0,helpers,partials,data) { | |
| var alias1=depth0 != null ? depth0 : {}, alias2=helpers.helperMissing, alias3=container.escapeExpression; | |
| return alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:landing_screen",depth0,{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:last_public_books",{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:mission",{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:social_networks",(depth0 != null ? depth0.urls : depth0),{"name":"partial","hash":{},"data":data})) | |
| + "\n" | |
| + alias3((helpers.partial || (depth0 && depth0.partial) || alias2).call(alias1,"welcome:credits",(depth0 != null ? depth0.urls : depth0),{"name":"partial","hash":{},"data":data})); | |
| },"useData":true}); | |
| if (typeof define === 'function' && define.amd) { | |
| define([], function() { | |
| return __templateData; | |
| }); | |
| } else if (typeof module === 'object' && module && module.exports) { | |
| module.exports = __templateData; | |
| } else { | |
| __templateData; | |
| } | |
| }); | |
| ;require.register("modules/welcome/views/welcome", function(exports, require, module) { | |
| var NotLoggedMenu, loginPlugin, showLastPublicItems, urls; | |
| NotLoggedMenu = require('modules/general/views/menu/not_logged_menu'); | |
| loginPlugin = require('modules/general/plugins/login'); | |
| showLastPublicItems = require('../lib/show_last_public_items'); | |
| urls = require('lib/urls'); | |
| module.exports = Marionette.LayoutView.extend({ | |
| id: 'welcome', | |
| template: require('./templates/welcome'), | |
| regions: { | |
| previewColumns: '#previewColumns' | |
| }, | |
| initialize: function() { | |
| return loginPlugin.call(this); | |
| }, | |
| events: { | |
| 'click .toggleMission': 'toggleMission' | |
| }, | |
| behaviors: { | |
| AlertBox: {}, | |
| Loading: {}, | |
| SuccessCheck: {} | |
| }, | |
| serializeData: function() { | |
| return { | |
| loggedIn: app.user.loggedIn, | |
| urls: urls | |
| }; | |
| }, | |
| ui: { | |
| topBarTrigger: '#middle-three', | |
| thanks: '#thanks', | |
| missions: 'ul.mission li', | |
| missionsTogglers: '.toggleMission .fa' | |
| }, | |
| onShow: function() { | |
| this.showPublicItems(); | |
| if (!app.user.loggedIn) { | |
| this.hideTopBar(); | |
| this.ui.topBarTrigger.once('inview', this.showTopBar); | |
| return this.hideFeedbackButton(); | |
| } | |
| }, | |
| showPublicItems: function() { | |
| return showLastPublicItems({ | |
| region: this.previewColumns, | |
| limit: 15, | |
| allowMore: false, | |
| assertImage: true | |
| })["catch"](this.hidePublicItems.bind(this))["catch"](_.Error('hidePublicItems err')); | |
| }, | |
| onDestroy: function() { | |
| this.showTopBar(); | |
| return this.showFeedbackButton(); | |
| }, | |
| hidePublicItems: function(err) { | |
| $('#lastPublicBooks').hide(); | |
| if (err != null) { | |
| throw err; | |
| } | |
| }, | |
| hideTopBar: function() { | |
| $('.top-bar').hide(); | |
| return $('main').addClass('no-topbar'); | |
| }, | |
| showTopBar: function() { | |
| $('.top-bar').slideDown(); | |
| return $('main').removeClass('no-topbar'); | |
| }, | |
| hideFeedbackButton: function() { | |
| return $('#feedback').hide(); | |
| }, | |
| showFeedbackButton: function() { | |
| return $('#feedback').fadeIn(); | |
| }, | |
| toggleMission: function() { | |
| this.ui.missions.slideToggle(); | |
| return this.ui.missionsTogglers.toggle(); | |
| } | |
| }); | |
| }); | |
| ; | |
| //# sourceMappingURL=app.js.map |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment