Jump to content


School User
  • Posts

  • Joined

  • Last visited

Personal Information

  • School
    Frog Towers

Recent Profile Visitors

5,423 profile views

Chris.Smith's Achievements


Contributor (2/6)

  • First Post
  • Collaborator
  • Conversation Starter

Recent Badges




Community Answers

  1. Hi @pconkie, This was introduced in the last patch. We have fixed it but I have no idea when that fix will get to you. @Graham Quince can you chase this one from a customer perspective as then Paul won't have to wait until Galileo for the fix. ~ Chris
  2. Hi @Matt Mason, In the Da vinci release, we updated the library that loads FrogOS (StealJS). Unfortunately, the new version of that library works slightly differently to the old one. Here is the change you need to make. steal.import('dataviewer/dataviewer!frog-component').then(function() { var formUuid = '..'; // the rest should be the same }); As always, let us know how you get on and if you have any other questions don't hesitate to ask. ~ Chris
  3. Hi @pconkie, I've just helped the release team perform User Acceptance Testing (UAT) on this bug in the upcoming 7.2 release which should be with you inside of the next few weeks. ~ Chris
  4. Hey Paul, This is now fixed. At our end and hopefully will be with you soon. @Graham Quince Can you follow up with the release team later today to find out when Paul can expect to get this fix. ~ Chris
  5. Hey Paul, This looks like an issue with release 7.1.1 - I know where the problem is and how to fix it, we are working with our rollout team to figure out when we can get this fix to you. ~ Chris
  6. Hi Virginia, It looks to be working fine to me... Worth pointing out that it's not designed to handle human interference (clicking on the 2nd page) as it keeps an internal record of where it is. I didn't think in the case of digital signage that such a requirement would exist Let me know if this is something you need adding. ~ Chris
  7. Hi Virginia, I've created you a FrogCode Widget which does everything that you need it to... I say "need" because due to time and technical limits I have not been able to implement transition effects (fade in/out). When you come to use the widget, make sure it is on the first page of the site only... this is important. Once on, it will be invisible when the site is live. In edit mode, you will be able to set a time in seconds for how long each page is visible before it proceeds to the next page. The last page will wrap back to the beginning. Please note that the timings won't be 100% reliable due to how JavaScript works. I could explain it but, when I explained it to Quincy he needed a sit down and a cup of tea to fix him. Ultimately, the pages will be visible for the amount of time you've specify at a minimum. If you need any help installing this widget, let us know, otherwise you should be good to go! ~ Chris 5F9F0F832001BD9A84355FD5266C4D02419699EC9881C2AC.tgz
  8. Hi Virginia, So the suggestion is to have one site that your raspberry pi's can view. We can then use a combination of nested page widgets and external embed widgets to add content from frog and external websites respectively. Being digital signage, obviously we are going to want something that will cycle through the pages, displaying the content for a set amount of time for each page. Does this all sound correct? ~ Chris
  9. I am on holiday as of 01/09/2017! If you need any Development-based support give @Graham Quince a nudge and he'll help as best he can :)

  10. Hi Paul, There are two methods of catching the "close" event on an app. The first is move involved than the other. { 'app.close': function(el, ev) { this.closeFirebaseConnection(); this.trigger('os.app.close'); // <--- This has to be run or the app will not close!!! } } The next one is the advised one to use... { onClose: function(close) { this.closeFirebaseConnection(); close(); // <-- Tells FrogOS that you are ready for the app to close. } } Both are fine to use, however the onClose hook is safe from future changes. Hope that answers your question, ~ Chris
  11. @pconkie, There is are a differences between native platform apps and FrogCode apps and unfortunately this is one. Because there may be another app on the system called 'polls', you have to enter your package's id. There is currently a problem with the openApp method however, so use the following example to get you started: this.trigger('os.internal.launchapp', { name: appID, view: 'student', appModel: new Com.Frog.Model({ 'uuid' : appID, 'role_name': Object.values(_Roles.serialize()).filter(function(role) { return /app\.externalapps\.(?:[0-9A-F]{8}\.)+polls$/gim.test(role); })[0], 'extended_data' : { 'from_package' : true } }) }); Don't look deeply into exactly what is going on here, as I will be fixing this as soon as I get chance. ~ Chris
  12. Hi @pconkie, When an app is opened with some data - or options - it is available from instantiation as it may be required to tell the app how to set up, where to deeplink to, etc. This is done in the form of an object that is assigned to the prototype scope - this.options Consider the following example: // package/widget/48F1...AB73/widget.js FrogOS.openApp('7C974713200486AFDC475F8BD94B0000FD3A143C6506D1A6', { foo: 'bar' }); // package/application/7C97...D1A6/production.js Com.Frog.Controllers.Application.extend('7C974713200486AFDC475F8BD94B0000FD3A143C6506D1A6.Controllers.Core', { defaults: { foo: 'baz' } }, { packageID: '7C974713200486AFDC475F8BD94B0000FD3A143C6506D1A6', init: function() { this.main(); }, update: function(options) { this._super(options); this.main(); }, main: function() { this.render(); }, render: function() { this.element.html( this.view('main.ejs', { title: this.options.foo }) // renders out <h1>Bar</h1> ); } }); You open your app by passing the package id into FrogOS.openApp as the first param, your data is the second param. Your app will then open/focus and FrogOS will set the apps options to match/include the data passed in. When opening the app, this.options is set to the contents of the defaults object in the static object; which is then overridden by the data passed in. When focusing the application (calling openApp when there is already one open) your entry point is the update method. this._super(options) merges the any new data with the existing this.options. In this example: we started with a default of this.options.foo = 'baz'. We initialised with a value of 'bar' so this replaced 'baz' as this.options.foo = 'bar'. If we tried to open the application again, this time with a different value, 'bar' would be overwritten by that value. There are some complications that you may experience depending how complex this setup gets, but usually you should be fine. ~ Chris
  13. Finally caught up on forum messages after being ill for three weeks... normal service shall now resume!

  • Create New...