import Marionette from 'backbone.marionette'; import Radio from 'backbone.radio'; import Header from 'common/layout/views/header'; import template from 'common/layout/templates/default.hbs'; let contentChannel = Radio.channel('appContent'); export default Marionette.LayoutView.extend({ template: template, regions: { header: '.header-wrapper', content: '.content' }, initialize() { Marionette.LayoutView.prototype.initialize.apply(this, arguments); contentChannel.on('updateContent', (content) => { this.showHeader(); this.showChildView('content', content); }); }, showHeader() { if (! this.headerView) { this.headerView = new Header(); this.showChildView('header', this.headerView); } } });
export default Marionette.LayoutView.extend({ template: template, behaviors: { 'l20n': {}, 'column': {}, }, regions: { 'presetsNav': '.rg_presets_nav', 'freeAdditionNav': '.rg_free_addition_nav', }, ui: { 'column': '#contrib_column', }, initialize: function () { this._radio = Wreqr.radio.channel('global'); }, setModel: function (model) { this.model = model; this.render(); }, onBeforeOpen: function () { this._radio.vent.trigger('column:closeAll'); this._radio.vent.trigger('widget:closeAll'); }, open: function () { this.triggerMethod('open'); }, close: function () { this.triggerMethod('close'); }, onRender: function () { var presetNavItems = [], presetsNav = new NavPillsStackedListView(), freeAdditionNav = new NavPillsStackedListView(), presetModels = this.options.theme.get('presets').models; for (var key in presetModels) { if (presetModels.hasOwnProperty(key)) { presetNavItems.push({ 'label': presetModels[key].get('name'), 'description': presetModels[key].get('description'), 'callback': this._radio.commands.execute.bind( this._radio.commands, 'column:showContribForm', { 'model': this.model, 'presetModel': presetModels[key] } ) }); } } presetsNav.setItems(presetNavItems); freeAdditionNav.setItems([{ 'label': document.l10n.getSync('contribColumn_freeAddition'), 'callback': this._radio.commands.execute.bind( this._radio.commands, 'column:showContribForm', { 'model': this.model } ) }]); this.getRegion('presetsNav').show( presetsNav ); this.getRegion('freeAdditionNav').show( freeAdditionNav ); }, });
module.exports = Marionette.LayoutView.extend({ template: template, regions: { modulesFilterMetaRegion: '.nm-module-filter-meta', modulesRegion: '#content', sidebarRegion: '#sidebar' }, ui: { content: '#content', sidebar: '#sidebar', backToTopButton: '#back-to-top' }, behaviors: { GoToTopBehavior: { behaviorClass: GoToTopBehavior } }, initialize: function (options) { this.mods = options.mods; }, events: { 'click .js-nm-clear-filters': function () { this.facetsView.clearFilters(); } }, onShow: function () { $('.arrow-down, .arrow-right').click(function () { $(this) .toggleClass('arrow-down arrow-right') .siblings('ul').toggle(); }); function updateAncestors (el, checked) { var all = true; el.siblings().each(function() { all = $(this).children('input[type="checkbox"]') .prop('checked') === checked; return all; }); if (all) { var grandparent = el.parent('ul').parent('li'); if (grandparent.length) { grandparent.children('input[type="checkbox"]').prop({ checked: checked, indeterminate: false }); updateAncestors(grandparent, checked); } } else { el.parents('li').children('input[type="checkbox"]').prop({ checked: false, indeterminate: true }); } } $('#sidebar input[type="checkbox"]').click(function() { var $this = $(this); var checked = $this.prop('checked'), parent = $this.parent(); parent.find('input[type="checkbox"]').prop({ checked: checked, indeterminate: false }); updateAncestors(parent, checked); }); var typeFriendlyName = { CFM: 'Cross-Faculty', GEM: 'GEM', Module: 'Faculty', SSM: 'Singapore Studies', UEM: 'Breadth / UE' }; var semesterNames = config.semesterNames; var mods = this.mods; _.each(mods, function (mod) { mod.level = mod.ModuleCode[mod.ModuleCode.search(/\d/)] * 1000; if (mod.Types) { mod.Types = _.map(mod.Types, function (type) { return typeFriendlyName[type] || type; }); } else { mod.Types = ['Not in CORS']; } mod.semesterNames = []; for (var i = 0; i < mod.History.length; i++) { var history = mod.History[i]; var sem = history.Semester; mod.semesterNames.push(semesterNames[sem - 1]); mod['LecturePeriods' + sem] = history.LecturePeriods || ['No Lectures']; mod['TutorialPeriods' + sem] = history.TutorialPeriods || ['No Tutorials']; } }); var filteredModules = new ModuleCollection(); var facets = new FacetCollection([], { filteredCollection: filteredModules, pageSize: 25, rawCollection: mods }); facets.add(new ArrayFacetModel({ filteredCollection: mods, key: 'semesterNames', label: 'Semesters', slug: 'semesters' })); facets.add(new ArrayFacetModel({ filteredCollection: mods, key: 'Types', label: 'Types', slug: 'types' })); facets.add(_.map({ Department: 'Faculty / Department', level: 'Level' }, function(label, key) { return { filteredCollection: mods, key: key, label: label, slug: slugify(label) }; })); facets.add({ filteredCollection: mods, key: 'ModuleCredit', label: 'Modular Credits (MCs)', slug: 'mcs', sortBy: function (filter) { return +filter.label; } }); _.each([1, 2], function (semester) { facets.add(_.map(['Lecture Periods', 'Tutorial Periods'], function(label) { var currentLabel = 'Sem ' + semester + ' ' + label; return new ArrayFacetModel({ filteredCollection: mods, key: label.replace(' ', '') + semester, label: currentLabel, slug: slugify(currentLabel) }); })); }); this.modulesRegion.show(new LoadingView()); var that = this; var moduleFinderNamespace = config.namespaces.moduleFinder + ':'; localforage.getItem(moduleFinderNamespace + 'filters', function (selectedFilters) { if (selectedFilters) { _.each(facets.models, function (facet) { var filters = selectedFilters[facet.get('label')]; if (filters && filters.length) { _.each(facet.get('filters').models, function (filter) { if (filters.indexOf(filter.get('label')) > -1) { filter.select(); } }); } }); } that.facetsView = new FacetsView({ collection: facets, threshold: 600 }); that.sidebarRegion.show(that.facetsView); that.modulesFilterMetaView = new ModulesFilterMetaView({ model: new Backbone.Model({ selectedFilters: selectedFilters, resultsLength: that.facetsView.collection.rawFilteredCollection.length }) }); that.listenTo(that.facetsView, 'selectedFiltersChanged', function (selectedFilters) { that.modulesFilterMetaView.updateView(selectedFilters, that.facetsView.collection.rawFilteredCollection.length); }); that.modulesFilterMetaRegion.show(that.modulesFilterMetaView); that.modulesRegion.show(new ModulesListingView({collection: filteredModules})); }); } });
import application from '../application'; const Content = Mn.LayoutView.extend({ template: require('./templates/content'), regions: { header: '[role="complementary"]', tracks: '.tracks', }, modelEvents: { 'change:currentPlaylist': 'switchPlaylist' }, onBeforeShow () { this.showChildView('header', new HeaderView({ model: this.model })); this.switchPlaylist(null, this.model.get('currentPlaylist')); }, // only the router change the current playlist switchPlaylist (appState, currentPlaylist) { this.showChildView('tracks', new TracksView({ collection: currentPlaylist.get('tracks') })); } }); export default Content;
var View = Marionette.LayoutView.extend({ template: _.template(''), className: 'updatepassword view', events: { 'submit form': 'updatePassword', }, initialize: function() { this.session = Session.model.getInstance(); this.dfd = $.Deferred(); }, onRender: function() { this.form = new Backbone.Form({ template: require('./update_password.tpl.html'), schema: { cur_password: { type: 'Password', editorAttrs: { placeholder: 'Votre mot de passe actuel' }, validators: ['required'] }, password: { type: 'Password', editorAttrs: { placeholder: 'Votre nouveau mot de passe' }, validators: ['required', { type: 'regexp', regexp: /.{6,}/, message: 'Passwords to short' }] }, password2: { type: 'Password', editorAttrs: { placeholder: 'Confirmer le nouveau mot de passe' }, validators: ['required', { type: 'match', field: 'password', message: 'Passwords must match!' },] }, } }).render(); this.$el.append(this.form.$el); }, updatePassword: function(e) { e.preventDefault(); var self = this; var $form = this.$el.find('form'); if ($form.hasClass('loading')) return false; var errors = this.form.validate(); console.log(errors); if (errors) return false; var formValues = this.form.getValue(); var curPassword = formValues.cur_password; var password = formValues.password; console.log(formValues); var user = User.getCurrent(); var data = { uid: user.get('externId'), mail: user.get('email'), current_pass: curPassword, pass: password, }; if (user.get('externId')) { //update serveur this.$el.addClass('block-ui'); $form.addClass('loading'); var query = { url: config.apiUrl + '/user/' + user.get('externId') + '.json', type: 'put', contentType: 'application/json', data: JSON.stringify(data), error: function(jqXHR, textStatus, errorThrown) { self.$el.removeClass('block-ui'); $form.removeClass('loading'); //TODO: Manage error type console.log(errorThrown); $form.find('input[name="cur_password"]').val(''); Dialog.alert({ closable: true, message: i18n.t('dialogs.passwdError') }); }, success: function(response) { self.$el.removeClass('block-ui'); $form.removeClass('loading'); self.dfd.resolve(); self.dialogRequestNewpassword(); } }; this.session.getCredentials(query).done(function() { $.ajax(query); }); } }, dialogRequestNewpassword: function() { Dialog.show({ title: 'Modification de votre mot de passe', message: 'Votre mot de passe a été modifié !', type: 'type-success', buttons: [{ label: 'Fermer', action: function(dialogItself) { dialogItself.close(); } }] }); } });
var Layout = Marionette.LayoutView.extend({ template: `<div><div id="toggles"></div><div id="data"></div></div>`, regions: { 'toggles': '#toggles', 'data': '#data' }, handleTogglesChanged: function(toggleState) { this.state.toggles = Object.assign({}, this.state.toggles, toggleState); //in real app you would then update the collection //call fetch on that collection, which when updated will update other collections //this is maybe a little wierd, COULD use a Redux store and and subscribe to it? this.renderReact(); }, initialize: function initialize(options) { this.state = { toggles: { 'mobile_market_type': '2G', 'bandwidth_metric_type': 'Mean' } }; this.render(); }, // thoughts on where to call this? // layout views pretty much only render once, so I suppose this is OK? onRender: function onRender() { this.renderReact(); }, renderReact: function renderReact() { ReactDOM.render(<Toggles togglesChanged={this.handleTogglesChanged.bind(this)} toggleState={this.state.toggles} />, document.getElementById('toggles')); } });
module.exports = Marionette.LayoutView.extend({ // Layouts have no immediate template template: false, /** * Add regions to the view by templating and attaching * a new region holder to the DOM. * * @example * view.addRegion('r1', { prefix: 'r1' }); * * @public * * @param {string} name - Name of the region to add. * @param {object} definition - Region definition. */ addRegion: function(name, definition) { // Append regions prior to assigning them var formatted = { el: this.appendRegion(name, definition) }; Marionette.LayoutView.prototype.addRegion.call(this, name, formatted); }, /** * Add multiple regions at one. * * @example * view.addRegions({ * 'r1': { prefix: 'r1' }, * 'r2': { prefix: 'r2' } * }); * * @public * * @param {regions} name - Regions object where the key represents * the region name and the value is the region definition. */ addRegions: function(regions) { var formatted = {}; // Append Regions prior to assigning them _.each(regions, function (val, key) { formatted[key] = { el: this.appendRegion(key, val) }; }, this); Marionette.LayoutView.prototype.addRegions.call(this, formatted); }, /** * Remove both region and holder el. * * @example * view.removeRegion('r1'); * * @public * * @param {string} name - Name of the region to remove. */ removeRegion: function(name) { // Remove $region element this.$regions[name].remove(); Marionette.LayoutView.prototype.removeRegion.apply(this, arguments); }, /** * Append app region template to DOM. * * @private * * @param {string} name - Name of the region to add. * @param {object} definition - Region definition. */ appendRegion: function (name, definition) { var tmpl = definition.tmpl, props = _.extend({ name: name }, definition); // Can template a javascript function delete props.tmpl; // Template will fail if props are missing _.defaults(props, { prefix: '', name: '', cls: '' }); var $region = $(_.template(tmpl, props)); // Append templateted html this.$regions = this.$regions || {}; this.$regions[name] = $region; this.$el.append($region); return $region; } });
var Marionette = require('backbone.marionette'); var template = require('../templates/layout.hbs'); var App = require('../../../../app'); var Layout = Marionette.LayoutView.extend({ template: template, regions: { subjectPointers: '[data-region="subject-pointers"]', jumbotron: '[data-region="jumbotron"]', featurette : '[data-region="featurette"]' } }); App.reqres.setHandler('new:establishingBotnets:layout', function () { return new Layout(); }); module.exports = Layout;
var Marionette = require('backbone.marionette'); module.exports = Marionette.LayoutView.extend({ template: require('../../tmpl/row.hbs'), childViews: [], initialize: function() { this.childViews.forEach(function(View, index) { this.addRegion('row' + index, '.row:nth-of-type(' + (index + 1) + ')'); }.bind(this)); }, templateHelpers: function() { return { childViews: this.childViews }; }, onShow: function() { this.childViews.forEach(function(View, index) { this.getRegion('row' + index).show(new View(this.options)); }.bind(this)); } });
module.exports = Marionette.LayoutView.extend({ template: require('./city_autocomplete.tpl.html'), className: '', events: { 'submit form': 'onFormSubmit', }, initialize: function(options) { this.options = options; }, onRender: function() { var self = this; var city = City.model.getInstance(); this.$el.find('input.js-autocomplete').autocomplete({ select: function(event, ui) { self.selectedItem = ui.item; }, source: function(request, response) { response(city.search(request.term)); }, appendTo: self.$el.find('.js-autocomplete-results'), minLength: 2 }); }, onFormSubmit: function(e) { var self = this; e.preventDefault(); if ( !this.selectedItem ) return false; if ( window.cordova && window.cordova.plugins.Keyboard.isVisible ) { console.log('wait onKeyboardhide'); self.onKeyboardhide = function() { console.log('onKeyboardhide'); window.removeEventListener('native.keyboardhide', self.onKeyboardhide); self.saveUser(); }; window.addEventListener('native.keyboardhide', self.onKeyboardhide); } else self.saveUser(); }, saveUser: function() { console.log('saveUser'); var user = User.getCurrent(); user.set('city', this.selectedItem); user.save(); }, onDestroy: function() { var self = this; } });
var ClassDef = Marionette.LayoutView.extend({ template: require('./dashboard_logs.tpl.html'), className: 'inner logs', events: { 'click .log-item': 'onLogClick' }, initialize: function() { this.logs = User.getCurrent().get('logs'); this.someHelp(); }, serializeData: function() { var logs = this.logs.toJSON(); _.forEach(logs, function(log) { log.createdAt = moment(log.createdAt).calendar(); }); return { logs: logs }; }, someHelp: function(){ var queryHash = window.location.hash; var params = _.parseQueryHash(queryHash); var currentUser = User.getCurrent(); var helps = Help.collection.getInstance(); helps.someHelp(params); }, onLogClick: function(e) { var id = $(e.currentTarget).data('id'); var log = this.logs.get(id); var category = log.get('category'); if (category == 'mission') Router.getInstance().navigate('/mission/' + log.get('data').mission.id, {trigger: true}); } });
var LoginLayout = Mn.LayoutView.extend({ initialize: function () { this.model = new User({ email: '', password: '', message: '' }); var thisView = this; // bind model change to validation function }, // el: '#app-container', template: require('./login.layout.html'), bindings: { '#InputEmail': 'email', '#InputPassword1': 'password', '#login-msg': 'message' }, returnMsgBindings: { '#login-msg': 'message' }, onRender: function() { if(this.model) { this.stickit(); } this.model.set({email:'', password:'', message:''}); $('#login-msg', this.$el).hide(); }, events: { 'click #login-submit': function (e) { e.preventDefault(); var thisView = this; this.model.login() .then(function(result) { if(result.code === 2000) { appData.user = result.user; appData.company = result.company; // clear value appData.isLogin = true; Backbone.history.navigate('/dashboard', true); // naviaget to dash board } else { // update result to dom $('#login-msg', thisView.$el).show(); thisView.model.set('message', result.message); } }); } } });
/** * A view to render the base structure for an element * of content with an associated header. * * Copyright 2015 Ethan Smith */ var Marionette = require('backbone.marionette'); var SummaryBlock = Marionette.LayoutView.extend({ tagName: 'div', template: '#template-summaryblock', regions: { "content": ".content", "toolbar": ".toolbar", }, className: function() { return ('summaryBlock ' + this.model.get('nestDepth') + ' ' + this.model.get('classes')).trim(); } }); module.exports = SummaryBlock;
'use strict'; var Backbone = require('backbone'), $ = require('jquery'), _ = require('lodash'), i18n = require('i18next'), Marionette = require('backbone.marionette'); var Layout = Marionette.LayoutView.extend({ header: { titleKey: 'settings', buttons: { left: ['back'] } }, template: require('./settings.tpl.html'), className: 'page settings ns-full-height', events: {}, initialize: function() {}, serializeData: function() {}, onRender: function(options) {}, onShow: function() {}, }); module.exports = Layout;
var View = Marionette.LayoutView.extend({ header: 'none', template: require('./footer.tpl.html'), className: '', events: { 'click .capture-photo-js': 'capturePhoto', 'submit form': 'uploadPhoto', 'click .forest-time-js': 'forestTime', 'click .btn-clue': 'onBtnClueClick' }, /*triggers: { 'click .btn-clue': 'btn:clue:click' },*/ initialize: function() { this.moment = require('moment'); this.Main = require('../main/main.view.js'); this.listenTo(User.collection.getInstance(), 'change:current', this.onCurrentUserChange); this.listenTo(User.getCurrent().getTimeForest(), 'change:total', this.displayTimeForest); /*this.on('btn:clue:click', function(e) { //Hack: enable to setTimeout(function() { console.log('default btn:clue:click', e); }); });*/ }, onCurrentUserChange: function(newUser, prevUser) { this.stopListening(prevUser.getTimeForest()); this.listenTo(newUser.getTimeForest(), 'change:total', this.displayTimeForest); this.render(); }, serializeData: function() {}, onRender: function(options) { var self = this; this.$fabDial = this.$el.find('.fab-dial'); this.$fabDial.nsFabDial(); this.onBackBtnClick = this.onBackBtnClick || function(e) { self.$fabDial.trigger('click'); e.isDefaultPrevented = true; }; this.$fabDial.on('show.bs.dropdown', function(e) { $('body').addClass('show-footer-overlay'); document.addEventListener('backbutton', self.onBackBtnClick, false); }); this.$fabDial.on('hide.bs.dropdown', function(e) { $('body').removeClass('show-footer-overlay'); document.removeEventListener('backbutton', self.onBackBtnClick, false); }); this.displayTimeForest(); }, onBtnClueClick: function(e) { this.trigger('btn:clue:click', e); if ( !e.isDefaultPrevented() ) Router.getInstance().navigate('clue', {trigger:true}); }, displayTimeForest: function() { var duration = User.getCurrent().getTimeForest().get('total'); var display = this.moment.duration(duration, 'seconds').format('h[h] mm[min] ss[s]'); this.$el.find('.time-forest-display-js').text(display); }, capturePhoto: function() { var self = this; this.Main.getInstance().showLoader(); if (!window.cordova) self.createObservation(); else { // Take picture using device camera and retrieve image as a local path navigator.camera.getPicture( _.bind(self.onSuccess, self), _.bind(self.onFail, self), { /* jshint ignore:start */ quality: 75, targetWidth: 1000, targetHeight: 1000, destinationType: Camera.DestinationType.FILE_URI, correctOrientation: true, sourceType: Camera.PictureSourceType.CAMERA, /* jshint ignore:end */ } ); } }, onSuccess: function(imageURI) { var self = this; if (window.cordova) { //TODO put tag projet in config var tagprojet = 'noe-obf'; var fsFail = function(error) { console.log('failed with error code: ' + error.code); }; var copiedFile = function(fileEntry) { // save observation and navigate to obsvertion // self.uploadPhotoMob(fileEntry.nativeURL); self.createObservation(fileEntry.nativeURL); }; var gotFileEntry = function(fileEntry) { console.log('got image file entry: ' + fileEntry.nativeURL); var gotFileSystem = function(fileSystem) { fileSystem.root.getDirectory(tagprojet, { create: true, exclusive: false }, function(dossier) { fileEntry.moveTo(dossier, (new Date()).getTime() + '_' + tagprojet + '.jpg', copiedFile, fsFail); }, fsFail); }; /* jshint ignore:start */ window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFileSystem, fsFail); /* jshint ignore:end */ }; window.resolveLocalFileSystemURI(imageURI, gotFileEntry, fsFail); } }, onFail: function(message) { console.log(message); this.Main.getInstance().hideLoader(); }, createObservation: function(fe, id) { var self = this; var router = require('../routing/router'); var observationModel = new(Observation.model.getClass())(); var currentPos = CurrentPos.model.getInstance(); currentPos.watch().always(function(){ //set observation model observationModel.set({ 'userId': User.getCurrent().get('id'), 'date': self.moment().format('X'), 'photos': [{ 'url': fe ? fe : '', 'externId': id ? id : '' }], 'coords': { latitude: _.get(currentPos.get('coords'), 'latitude', 0), longitude: _.get(currentPos.get('coords'), 'longitude', 0) } }); //Save observation in localstorage Observation.collection.getInstance().add(observationModel) .save() .done(function(data) { //navigate router.getInstance().navigate('observation/' + data.id, { trigger: true }); self.Main.getInstance().hideLoader(); }) .fail(function(e) { console.log(e); }); }); }, forestTime: function(e) { e.preventDefault(); e.stopPropagation(); User.getCurrent().getTimeForest().toggleStart(); } });
import Marionette from 'backbone.marionette'; import $ from 'jquery'; import templateNotFound from '../templates/not-found.html'; let NotFoundLayoutView = Marionette.LayoutView.extend({ //Can't use arrow function in initialize method, because template isn't recognized initialize: function() { var html = templateNotFound({message: 'Page Not Found'}); this.template = html; }, onShow: () => { $('.loading').hide(); }, onDestroy: () => { } }); export default NotFoundLayoutView;
module.exports = Marionette.LayoutView.extend({ template: require('./mission_sheet.tpl.html'), events: { 'click .btn-accept': 'onAcceptClick', 'click .btn-sheet': 'openWindow', 'click .btn-back': 'onBackClick' }, attributes: function () { var user = User.getCurrent(); var classNames = 'page page-mission_sheet'; if (user.hasCompletedMission(this.model)) classNames += ' is-complete'; else if (user.hasAcceptedMission(this.model)) classNames += ' is-accept'; return { 'class': classNames }; }, regions: { observations: '.observations' }, initialize: function () { var self = this; var user = User.getCurrent(); this.header = { title: this.model.get('title'), buttons: { left: ['back'] } }; this.listenTo(user, 'change:acceptedMissions', this.onAcceptChange); this.listenTo(Observation.collection.getInstance(), 'add', function (observation) { observation.set({ 'missionId': self.model.get('id'), 'cd_nom': self.model.get('cd_nom'), 'comment': self.model.get('comment') }); observation.save(); }); this.listenTo(Footer.getInstance(), 'btn:clue:click', function (e) { e.preventDefault(); Router.getInstance().navigate('clue?missionId=' + self.model.get('id'), { trigger: true }); }); /* var queryHash = "missionsheet"; var params = _.parseQueryHash(queryHash); var currentUser = User.getCurrent(); var helps = Help.collection.getInstance(); helps.someHelp(params); */ }, openWindow: function (ev) { var toOpen; if (ev.currentTarget.id === "url") toOpen = this.model.get('url'); else toOpen = ev.currentTarget.innerHTML; window.open(toOpen, '_blank'); }, onRender: function () { var user = User.getCurrent(); var observations = Observation.collection.getInstance(); observations = observations.where({ userId: user.get('id'), missionId: this.model.get('id') }); var ObservationsView = require('../../observation/observation_list.view'); this.showChildView('observations', new ObservationsView({ collection: new Backbone.Collection(observations) })); switch (this.model.get('environment')) { case "affleurements rocheux": this.$el.find('.badge').addClass("grey"); break; case 'forêts de conifères': this.$el.find('.badge').addClass("green"); break; case "forêts de feuillus": this.$el.find('.badge').addClass("green-light"); break; case "fourrés et boisements": this.$el.find('.badge').addClass("yellow"); break; case "jardins et parcs": this.$el.find('.badge').addClass("pink"); break; case "landes sèches": this.$el.find('.badge').addClass("orange"); break; case "prairies": this.$el.find('.badge').addClass("grey-light"); break; case "rivières, mares et étangs": this.$el.find('.badge').addClass("blue"); break; case "vergers": this.$el.find('.badge').addClass("yellow-light"); break; case "villages et zones urbaines": this.$el.find('.badge').addClass("orange-light"); break; case "zones humides": this.$el.find('.badge').addClass("blue-light"); break; default: console.log("wrong environment"); break; } }, serializeData: function () { return { taxon: this.model.toJSON() }; }, onAcceptClick: function (e) { var user = User.getCurrent(); user.toggleAcceptedMission(this.model); user.save(); }, onAcceptChange: function () { var user = User.getCurrent(); if (user.hasAcceptedMission(this.model)) this.$el.addClass('is-accept'); else this.$el.removeClass('is-accept'); }, onBackClick: function () { Router.getInstance().back(); }, onDestroy: function () { var self = this; } });
module.exports = Marionette.LayoutView.extend({ initialize: function () { }, template: template, regions: { friendsListRegion: '.nm-friends-list', friendsSelectedListRegion: '.nm-friends-selected-list', timetableRegion: '.nm-friends-timetable' }, ui: { 'addButton': '.js-nm-friends-add-button' }, onShow: function () { var that = this; localforage.getItem('timetable:friends', function (data) { var friendsList = _.map(data, function (friend) { return new FriendModel(friend); }); that.friendsListCollection = new Backbone.Collection(friendsList); that.friendsListView = new FriendsListView({collection: that.friendsListCollection}); that.friendsListRegion.show(that.friendsListView); var friendsSelectedList = that.friendsListCollection.where({selected: true}); that.friendsSelectedListView = new FriendsSelectedListView(); that.friendsSelectedListView.collection = new Backbone.Collection(friendsSelectedList); that.friendsSelectedListRegion.show(that.friendsSelectedListView); that.showSelectedFriendsList(); that.updateDisplayedTimetable(); that.friendsListCollection.on('change', function () { var friendsSelectedList = that.friendsListCollection.where({selected: true}); that.friendsSelectedListView.collection = new Backbone.Collection(friendsSelectedList); that.updateDisplayedTimetable(); that.showSelectedFriendsList(); that.friendsListView.render(); }); }); this.ui.addButton.popover({ html: true, placement: 'bottom', content: addFriendTimetableModalTemplate() }); }, events: { 'click .js-nm-friends-add': 'addFriendTimetable' }, showSelectedFriendsList: function () { this.friendsSelectedListView.render(); }, addFriendTimetable: function () { var that = this; var timetableUrl = $('#url').val(); var friendName = $('#name').val(); this.getFinalTimetableUrl(timetableUrl, function (data) { that.ui.addButton.popover('hide'); that.insertFriendTimetableFromUrl(friendName, data.redirectedUrl); }); }, getFinalTimetableUrl: function (timetableUrl, callback) { $.ajax({ url: 'http://nusmods.com/redirect.php', type: 'GET', crossDomain: true, dataType: 'json', data: { timetable: timetableUrl }, success: function (result) { if (callback) { callback(result); } }, error: function (xhr, status, error) { alert(status); } }); }, insertFriendTimetableFromUrl: function (name, timetableUrl) { var urlFragments = timetableUrl.split('/'); var queryFragments = urlFragments.slice(-1)[0].split('?'); var semester = parseInt(queryFragments[0].slice(3)); var timetableQueryString = queryFragments[1]; this.friendsListCollection.add(new FriendModel({ name: name, semester: semester, queryString: timetableQueryString, selected: false })); var friendsData = _.pluck(this.friendsListCollection.models, 'attributes'); friendsData = _.map(friendsData, function (person) { return _.omit(person, 'moduleInformation'); }); queryDB.setItemToDB('timetable:friends', friendsData); }, updateDisplayedTimetable: function () { var combinedLessons = _.map(this.friendsSelectedListView.collection.models, function (person) { return _.map(person.get('moduleInformation').timetable.models, function (lesson) { return lesson.attributes; }); }); combinedLessons = _.reduce(combinedLessons, function (a, b) { return a.concat(b); }, []); var TimetableFlexModel = new Backbone.Model({ lessonsList: combinedLessons, mergeMode: true }); this.timetableRegion.show(new TimetableFlexView({ model: TimetableFlexModel })); } });
var Marionette = require("backbone.marionette"); module.exports = Marionette.LayoutView.extend({ regions: { "pluginsContainer": ".plugins-loader-container", "configurationsContainer": ".configurations-manager-container" }, getPluginsContainerRegion: function () { return this.getRegion("pluginsContainer"); }, getConfigurationsContainerRegion: function () { return this.getRegion("configurationsContainer"); } });
tagName: "ul", className: "material-list", childView: CheapestSubstitutesItem, onChildviewLinkClicked: function (childView) { this.triggerMethod("brand:clicked", childView.model.get('brand')); } }); var ChartLayout = Marionette.LayoutView.extend({ template: require('./chart_template.tpl'), regions: { "chartRegion": "#chart-region" }, initialize: function (options) { this.model = options.model; }, onShow: function () { var chartView = new Views.Chart({ set: this.model.get('medicine').unit_price, subset: this.model.get('medicine').unit_price - this.model.get('cheapestAlternatives')[0].medicine.unit_price }); this.chartRegion.show(chartView); } }); module.exports = Marionette.LayoutView.extend({ template: require('./layout_template.tpl'), tagName: "div", id: "cheapest_substitute", regions: { "chartRegion": "#chart-region", "listRegion": "#substitutes-list-region"
module.exports = Marionette.LayoutView.extend({ initialize: function(options) { options = options || {}; if (!options.editorApp) { console.error("No editorApp passed to EditorLayout"); return; } this.editorApp = options.editorApp; _.bindAll(this, "onShow"); }, regions: { "tools": ".editor-tools-container", "mapview": ".editor-mapview-container", "codeview": ".editor-codeview-container", "imageTranslator": ".editor-imagetranslator-container" }, className: "editorAppView", template: window.JST["editor/layout"], onShow: function() { //add all subviews into the rendered view this.tools.show(new EditorToolsLayout({ editorApp: this.editorApp })); this.mapview.show(new EditorMapView({ viewsettings: this.editorApp.viewsettings, editorsettings: this.editorApp.editorsettings, model: this.editorApp.map })); this.codeview.show(new EditorCodeView({ model: this.editorApp.map, })); this.imageTranslator.show(new EditorImageTranslatorLayout({ imageTranslator: this.editorApp.imageTranslator, map: this.editorApp.map })); } });
module.exports = Marionette.LayoutView.extend({ template: require('./missions_aroundme_manually.tpl.html'), className: 'state state-manually', events: { 'click .btn-geoloc': 'onGeolocClick' }, initialize: function(options) { this.options = options; Header.getInstance().set({ titleKey: 'missionsAroundmeManually', buttons: { left: ['back'] } }); }, onShow: function() { /* this.$el.find('input.js-autocomplete').autocomplete({ // source: departement.collection.getInstance().toJSON(), appendTo: this.$el.find('.js-autocomplete-results'), _renderItem: function(ul, item) { var $li = $('<li />'); $li.text(item.title).data(item).appendTo(ul); return ul; }, select: function(event, ui) { var user = User.getCurrent(); user.set({ forceDepartement: true, departementIds: [ui.item.id] }); user.save(); Router.getInstance().navigate('#missions/aroundme', {trigger: true}); } });*/ }, onGeolocClick: function() { var user = User.getCurrent(); user.set({ forceDepartement: false }).save(); Router.getInstance().navigate('#missions/aroundme', {trigger: true}); } });
var View = Marionette.LayoutView.extend({ template: require('./header.html'), className: 'inner clearfix', events: { 'click .btn_back': 'historyBack', 'click .btn_close': 'historyBack' }, triggers: { 'click .btn_menu': 'btn:menu:click', 'click .btn_option': 'btn:option:click', 'click .btn_plus': 'btn:plus:click' }, btns: { menu: { icon: 'hamburger' }, back: { icon: 'arrow_left' }, plus: { icon: 'plus' }, search: { icon: 'search' }, option: { icon: 'khebab' }, close: { icon: 'close' } }, serializeData: function() { var self = this; var data = self.data || {}; data = _.defaultsDeep(data, { title: '', titleKey: '', titleArgs: {}, buttons: { left: ['menu'], right: [], } }); if ( !data.title && data.titleKey ) { console.log(data); data.title = i18n.t('header.titles.'+data.titleKey, data.titleArgs); } _.forEach(data.buttons, function(side) { _.forEach(side, function(btnName, index) { var config = self.btns[btnName]; side[index] = { name: btnName, icon: config.icon }; }); }); return data; }, set: function(data) { var self = this; self.data = _.cloneDeep(data); if (!self.data || self.data == 'none') self.data = { classNames: 'hidden' }; Marionette.LayoutView.prototype.render.apply(self); }, onRender: function(options) { var self = this; //self.$el.i18n(); self.$el.parent('header').attr('class', _.get(self.data, 'classNames', '')); }, historyBack: function() { console.log('header back'); Router.getInstance().back(); } /*onBtnMenuClick: function(e) { var app = require('app'); app.rootView.rgSidenav.currentView.toggleShow(); }*/ });
module.exports = Marionette.LayoutView.extend({ template: template, initialize: function () { // TODO: Populate default values of form elements for first time users. var formElements = { 'faculty': '#faculty', 'student': 'input:radio[name="student-radios"]', 'mode': 'input:radio[name="mode-radios"]', 'theme': '#theme-options' }; _.each(formElements, function (selector, item) { localforage.getItem(item, function (value) { if (value) { $(selector).val([value]); } }); }); localforage.getItem('ivle:ivleModuleHistory', function (value) { if (value) { $('#ivle-status-success').removeClass('hidden'); } }); this.ivleDialog = null; }, events: { 'click .random-theme': 'randomTheme', 'change #faculty, input:radio[name="student-radios"], input:radio[name="mode-radios"], #theme-options': 'updatePreference', 'keydown': 'toggleTheme', 'click .connect-ivle': 'connectIvle' }, connectIvle: function () { var that = this; if (that.ivleDialog === null || that.ivleDialog.closed) { var w = 255, h = 210, left = (screen.width / 2) - (w / 2), top = (screen.height / 3) - (h / 2); var options = 'dependent, toolbar=no, location=no, directories=no, ' + 'status=no, menubar=no, scrollbars=no, resizable=no, ' + 'copyhistory=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left; window.ivleLoginSuccessful = function (token) { $('#ivle-status-success').addClass('hidden'); $('#ivle-status-loading').removeClass('hidden'); localforage.setItem('ivle:ivleToken', token); that.fetchModuleHistory(token); window.ivleLoginSuccessful = undefined; }; var callbackUrl = window.location.protocol + '//' + window.location.host + '/ivlelogin.html'; var popUpUrl = 'https://ivle.nus.edu.sg/api/login/?apikey=APILoadTest&url=' + callbackUrl; that.ivleDialog = window.open(popUpUrl, '', options); } else { that.ivleDialog.focus(); } }, fetchModuleHistory: function (ivleToken) { var that = this; $.get( 'https://ivle.nus.edu.sg/api/Lapi.svc/UserID_Get', { 'APIKey': 'APILoadTest', 'Token': ivleToken }, function (studentId) { $.get( 'https://ivle.nus.edu.sg/api/Lapi.svc/Modules_Taken', { 'APIKey': 'APILoadTest', 'AuthToken': ivleToken, 'StudentID': studentId }, function (data) { that.saveModuleHistory(data); }, 'jsonp' ); }, 'jsonp' ); }, saveModuleHistory: function (moduleHistory) { localforage.setItem('ivle:ivleModuleHistory', moduleHistory.Results); $('#ivle-status-success').removeClass('hidden'); $('#ivle-status-loading').addClass('hidden'); }, randomTheme: function () { themePicker.selectRandomTheme(); }, updatePreference: function ($ev) { var $target = $($ev.target); $target.blur(); var property = $target.attr('data-pref-type'); var value = $target.val(); this.savePreference(property, value); }, savePreference: function (property, value) { if (property === 'faculty' && value === 'default') { alert('You have to select a faculty.'); localforage.getItem(property, function (value) { $('#faculty').val(value); }); return; } localforage.setItem(property, value); if (property === 'theme') { themePicker.applyTheme(value); } else if (property === 'mode') { themePicker.toggleMode(); } } });
import _ from 'underscore'; import hljs from 'highlightjs'; import Handlebars from 'handlebars'; import indexTemplate from '../../templates/index.template.html!text'; import 'highlightjs/styles/monokai.css!'; import 'highlightjs/styles/monokai_sublime.css!'; const IndexView = Marionette.LayoutView.extend({ template: Handlebars.compile(indexTemplate), ui: { codeBlocks: 'pre', }, templateHelpers: { simple_url: window.APP_CONTEXT.urls.simple, }, onShow() { _.each(this.ui.codeBlocks, (block) => { hljs.highlightBlock(block); }); } }); export default IndexView;
var _ = require('underscore'), Mn = require('backbone.marionette'), tpl = require('./layout-view.tpl'); module.exports = Mn.LayoutView.extend( { regions : { sampleRegion : '#sample-region' }, template : _.template(tpl), onRender : function() { this.sampleRegion.show( new Mn.ItemView( { className : 'well', template: _.template('<p>I\'m a Marionette view rendered on server side inside a region !</p>') } ) ); } } );
var ClassDef = Marionette.LayoutView.extend({ template: require('./dashboard_missions.tpl.html'), className: 'inner missions', events: { }, regions: { list: '.list-outer', listSuccessful: '.list-successful' }, initialize: function() { var acceptedMissions = User.getCurrent().getAcceptedMissions(); var completedMissions = User.getCurrent().getCompletedMissions(); this.missions = _.filter(acceptedMissions, function(mission) { return completedMissions.indexOf(mission) == -1; }); this.missions = _.sortBy(this.missions, function(mission) { return mission.inSeason().end.delta; }); this.successfulMissions = User.getCurrent().getCompletedMissions(); }, serializeData: function() { return { missions: this.missions, successfulMissions : this.successfulMissions }; }, onRender: function() { var collectionView = new CollectionView({ collection: new Backbone.Collection(this.missions) }); var successfulMissionCollectionView = new CollectionView({ collection: new Backbone.Collection(this.successfulMissions) }); this.showChildView('list', collectionView); this.showChildView('listSuccessful', successfulMissionCollectionView); } });
* Copyright (C) 2009-2016 SonarSource SA * mailto:contact AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import Marionette from 'backbone.marionette'; import Template from './templates/metrics-layout.hbs'; export default Marionette.LayoutView.extend({ template: Template, regions: { headerRegion: '#metrics-header', listRegion: '#metrics-list', listFooterRegion: '#metrics-list-footer' } });
'use strict'; var Marionette = require('backbone.marionette'); var template = require('../templates/team.hbs'); module.exports = Marionette.LayoutView.extend({ template: template });
var View = Marionette.LayoutView.extend({ template: require('./add_item.tpl.html'), className: 'add-item-view', events:{ 'submit #add-form' : 'submitForm', }, ui :{ titleFields : 'input[name=title]', descFields : 'input[name=description]', verbFields : 'input[name=verb]', headersFields: 'input[name=headers]', reqBodyFields: 'input[name=reqBody]', resStatusFields: 'input[name=resStatus]', resBodyFields: 'input[name=resBody]', commentFields: 'input[name=comment]', }, initialize: function(options) { }, submitForm: function (e){ console.log("submit ok" ); e.preventDefault(); this.ui.titleFields.val(); console.log("données : \n"+ "title : " +this.ui.titleFields.val()+"\n"+ "verb : " +this.ui.verbFields.val()+"\n"+ "description : " +this.ui.descFields.val()+"\n"+ "headers : " +this.ui.headersFields.val()+"\n"+ "reqBody : " +this.ui.reqBodyFields.val()+"\n"+ "resStatus : " +this.ui.resStatusFields.val()+"\n"+ "resBody : " +this.ui.resBodyFields.val()+"\n"+ "comment : " +this.ui.commentFields.val()+"\n" ); var model = formAddItem.getNewInstance(); model.set({ title : this.ui.titleFields.val(), verb :this.ui.verbFields.val(), description :this.ui.descFields.val(), headers :this.ui.headersFields.val(), resBody :this.ui.reqBodyFields.val(), resStatus:this.ui.resStatusFields.val(), resBody:this.ui.resBodyFields.val(), comment:this.ui.commentFields.val(), }); //console.log(model) //this.collection.add(model); }, onShow: function(){ console.log('show new item '); this.render(); console.log(this.$el); }, });