1. 11 Nov, 2017 1 commit
    • Evan W. Patton's avatar
      Add "Extension Version" field to help widget · 494ca7d1
      Evan W. Patton authored
      Assisting users with extensions is difficult because it is unclear
      whether problems occur because of bugs in the extension or due to a
      mismatch in versions when extensions work together. This commit adds
      an "Extension Version" header on the helper widget that displays the
      version number specified in the @DesignerComponent annotation if the
      version number is greater than 0.
      
      Closes #894
      
      Change-Id: If7fdd49795e81f8ff784036ce5745de499aafbd9
      494ca7d1
  2. 27 Oct, 2017 2 commits
    • Evan W. Patton's avatar
      Make if block mutator robust to undo/redo operations · 00be41cd
      Evan W. Patton authored
      This commit reconciles our implementation of the `if` block with the
      implementation in Blockly. In particular, our implementation only
      works under the assumption that the user is making changes via the
      mutator and causes graphical problems when the undo/redo feature in
      Blockly is used. The Blockly version correctly handles undo/redo, but
      the mutator is slightly different in its implementation. This change
      maintains our visual presentation of the mutator but uses the Blockly
      logic for updating.
      
      Fixes #973
      
      Change-Id: Ib335d4cd7f132f8bf21f9c691ee7a7e53f28e674
      00be41cd
    • Conor's avatar
      Update reference materials with new logo (#966) · 6deba8bc
      Conor authored
      I have updated all of the reference documentation pages to use the new
      MIT AI logo.
      
      Fixes #932
      6deba8bc
  3. 23 Oct, 2017 1 commit
  4. 22 Oct, 2017 1 commit
    • Evan W. Patton's avatar
      Update block tooltips when property selection changed · e2d49de6
      Evan W. Patton authored
      Prior to this commit, changing the target property in a getter/setter
      block would not update the tooltip of the block to match the new
      property. This commit updates the tooltip in response to the dropdown
      selection changing.
      
      Fixes #964
      
      Change-Id: I7ab095699f533fd262f2dc69cbae515e96163b8f
      e2d49de6
  5. 11 Oct, 2017 1 commit
    • Evan W. Patton's avatar
      Reduce number of companion updates · 51cafd67
      Evan W. Patton authored
      Opening and closing a mutator or clicking a block would result in the
      blocks code being resent to the companion because any workspace event
      would force a YAIL update. This change adds a isUi method to check
      whether a Blockly event is a UI event, which doesn't change the
      semantics of the program, and ignores such events for the purpose of
      updating the companion.
      
      Change-Id: Id80d1d094e585cc7182fe3987f8e0adc2b45b872
      51cafd67
  6. 10 Oct, 2017 1 commit
    • Evan W. Patton's avatar
      Defer update of warning indicator until workspace rendered · bd9758c1
      Evan W. Patton authored
      Warning indicator counters were 0 even if there were warnings in the
      workspace. This was due to a combination of optimizations where the
      warnings aren't computed if the workspace isn't rendered and the
      indicator isn't created until the first rendering pass. This means
      that when the indicator is rendered it has not been updated with the
      results of any error checking passes have been made.
      
      Fixes #953
      
      Change-Id: I5641c6444efeab9228efca5a74a78ed3a4577484
      bd9758c1
  7. 06 Oct, 2017 2 commits
  8. 03 Oct, 2017 1 commit
  9. 24 Sep, 2017 1 commit
    • Jeffrey I. Schiller's avatar
      Fix button height when font size is changed · cbb7ed03
      Jeffrey I. Schiller authored
      Make sure the button in the designer scales along with the font size.
      
      This change is a simplification of work originally done by Olivier Midy
      <osmidy@mit.edu>.
      
      Change-Id: Iad2033001f26b102506f8bba2dff89f94f6b8ab6
      cbb7ed03
  10. 22 Sep, 2017 3 commits
    • Evan W. Patton's avatar
      Use immediately deferred timer for MockForm refresh · 2fbb4bdb
      Evan W. Patton authored
      Large projects demonstrated that an O(n^2) behavior for the MockForm
      refresh function caused significant slowdown when loading and
      rendering large projects in the designer. Jeff originally fixed this
      by introducing a timer so that at least 2 seconds were provided
      between refresh calls. However, this introduces some visual glitches
      when components are dragged or immediately after project load due to
      the fact that up to two seconds must elapse before the component sizes
      are updated.
      
      This commit uses a timer that immediately fires after the current
      JavaScript execution context finishes so that changes to the form and
      its components takes effect immediately on the next render pass. To
      prevent O(n^2) behavior, only one timer is scheduled at any one point,
      and the timer is only cleared after the refresh pass has completed.
      
      Change-Id: I7c43ec19b6aad2d8fa6de2d5cdbf9913dec44abf
      2fbb4bdb
    • Evan W. Patton's avatar
      Fix project switching when connected to REPL · aef02557
      Evan W. Patton authored
      The Blockly update broke how the REPL interacted with App Inventor
      when switching between projects after connecting. This change ensures
      that pollYail is called when a workspace is made active so that the
      screen will be updated accordingly.
      
      Change-Id: I3b10365e59d247590a7f5f9e522a450b7ad2ab4b
      aef02557
    • Evan W. Patton's avatar
      Store block positions during upgrades · 853908e0
      Evan W. Patton authored
      Blocks workspace upgraders sometimes operate on the workspace in XML
      form rather than workspace form. When we did the Blockly update in May
      2017, we moved updating the positions of blocks to occur immediately
      before the first render of the workspace rather than at workspace load
      time. This results in all blocks being at 0, 0 if the project relied
      on a component where the upgrader used XML because the blocks do not
      get positioned until after the upgrade has run.
      
      This code wraps the blockToDOMWithXY function to update the position
      of the block during serialization to XML if rendering is turned off,
      i.e. we are loading the workspace.
      
      Fixes #920
      
      Change-Id: Ie19cbe4207e6c36979c2adb767748bb54def4551
      853908e0
  11. 18 Sep, 2017 1 commit
    • Jeffrey I. Schiller's avatar
      Make sure /about and /static are served · 2da38fa8
      Jeffrey I. Schiller authored
      App Engine may soon require that static content be declared static in
      appengine-web.xml. This change makes sure these directories, which hold
      the “Terms of Service” among other things, are properly declared.
      
      Change-Id: Id7409362e96a731cec75bd6cbbe3de376bf2beec
      2da38fa8
  12. 31 Aug, 2017 1 commit
  13. 28 Aug, 2017 4 commits
  14. 23 Aug, 2017 2 commits
    • Jeffrey I. Schiller's avatar
      Update logo (slight color change) · 61aa36dc
      Jeffrey I. Schiller authored
      Includes the favicon.ico as well as the logo
      
      Change-Id: Ie05bd5e3a6a3f072c81c91d11aee60b52fe9905c
      61aa36dc
    • Evan W. Patton's avatar
      Fix infinite loop when connecting companion · 289b888d
      Evan W. Patton authored
      A user reported an issue with a project where connecting the companion
      caused the ReplMgr to go into an infinite loop. The issue was due to a
      combination of setter block having an empty socket (triggering an
      error resulting in the slow path) and the fact that there were more
      than 20 top-level blocks in the project. After testing the first 20
      blocks it would attempt the fast path, which would retrigger the slow
      path, ad infinitum.
      
      This commit updates the countdown in the slow path to use the number
      of top-level blocks in the workspace rather than hard-coding 20
      checks.
      
      Fixes #887
      
      Change-Id: Ie15b0f35cd145ecc0b789707f032eca6c179d107
      289b888d
  15. 17 Aug, 2017 3 commits
    • Evan W. Patton's avatar
      Add option to generate extensions with old-style layout · 645eb86f
      Evan W. Patton authored
      Prior to the IOT release, extensions were packaged using the FQCN of
      the extension inside of the AIX file. To faciltate being able to
      contain multiple extension components in a single package, we switched
      to using the package name rather than the FQCN. This causes backward
      compatibility issues for extension developers who released extensions
      prior to the update.
      
      This commit adds a extensions.packagefqcn property to ant that can be
      set to true by developers supporting older extensions so that the
      internals of the extension package reflect the older layout. It is
      recommended that all new extensions be built with the default (false)
      to benefit from the new layout.
      
      Change-Id: Idd9134c7d4d7c19f9a8869e4f88e164e2efa5cc8
      645eb86f
    • Evan W. Patton's avatar
      Fix XSS vulnerability in ClientJsonParser · 902ac3d8
      Evan W. Patton authored
      ClientJsonParser was calling a GWT API that used eval() to parse JSON
      content rather than JSON.parse(). A maliciously crafted project
      containing an extension components.json file with Javascript instead
      of JSON would allow injecting arbitrary Javascript into the user's
      session. This commit switches to strict parsing and includes exception
      handling to report corrupt/invalid components.json to the user.
      
      Change-Id: Iafaaf004310ac45cf0c1cea18eae1cfd58de17ef
      902ac3d8
    • Evan W. Patton's avatar
      Make extension deletion robust to package name collisions · 563ec8c2
      Evan W. Patton authored
      If a project contained multiple extensions sharing the same package
      name, deleting one extension would also remove the other extensions
      sharing that package name. This generally shouldn't happen going
      forward because extension bundles automatically group extensions by
      package name (which is why this logic is in place), but it didn't
      handle the case where old extensions were in the same package.
      
      This commit groups extensions by the components.json file that defines
      them, and only deletes those extensions that are siblings by the
      components.json file, rather than blanket-deleting extensions solely
      by package name.
      
      Fixes #910
      
      Change-Id: I26a5db29a3919033fd50f2a2d65c6f805513ae2c
      563ec8c2
  16. 15 Aug, 2017 1 commit
  17. 12 Aug, 2017 1 commit
  18. 11 Aug, 2017 1 commit
  19. 21 Jul, 2017 1 commit
    • Evan W. Patton's avatar
      Add failure condition when extensions collide on package name · 5e072d92
      Evan W. Patton authored
      Taifun reported that importing many extensions of the same package
      name into a single project made them unable to load. This change
      detects this scenario and returns an error to the user preventing them
      from loading the conflicting extension. There is also a test to ensure
      that if one has two extensions in the same package and then loads a
      bundle containing the individually FQCN extensions the old extensions
      will be removed and placed with the bundled version.
      
      Change-Id: If35663d650d3a24f6c5aaeceaf490a24ac008522
      5e072d92
  20. 18 Jul, 2017 1 commit
    • Jeffrey I. Schiller's avatar
      Fix Tutorial Panel height on Firefox · 618e6500
      Jeffrey I. Schiller authored
      Firefox requires that the <div> that includes the Tutorial Panel has its
      height set to 100%, otherwise it displays it with a height of 150px (per
      the CSS standard).
      
      Change-Id: Id7afd34f4aa058dd5f7b4982d6409941d472d907
      618e6500
  21. 08 Jul, 2017 2 commits
    • Jeffrey I. Schiller's avatar
      Remove References to AI1 from No Projects Dialog · a41b262b
      Jeffrey I. Schiller authored
      Remove references to AI1 from the No Projects Dialog in non-English
      language translations.
      
      Change-Id: Ic518901c445cb65fbf6d0ac6b2abcd1276e23264
      a41b262b
    • Jeffrey I. Schiller's avatar
      Remove obsolete Splash Screen Message · 20462d16
      Jeffrey I. Schiller authored
      Remove the Splash Screen Message from OdeMessages. The message now comes
      from the data store. The update made to take the message from the data
      store neglected to remove the obsolete message from OdeMessages. We
      remove it here.
      
      Change-Id: I1ed7e751ce4a3ab150cf4250270b0a544416e9ac
      20462d16
  22. 06 Jul, 2017 3 commits
    • Klomi's avatar
      Update zh-CN and zh-TW localization files · 5d63ca64
      Klomi authored
      Change-Id: I4811755660bdcbb662f39f719b0cb7ad89b9f12f
      5d63ca64
    • Magdalena Sowder's avatar
      Added video and image enlargement · 03b4f234
      Magdalena Sowder authored
      Created a modal pop-up for videos and images from the tutorial. Added
      changes to separate file to create a new class that extends Frame.
      
      Change-Id: Ie47ce9896aefff2bcebe3cbe64fbe512a1258661
      03b4f234
    • Katie Mathison's avatar
      Fixed broken generic component method blocks · d6cbce49
      Katie Mathison authored
      There was an issue where some generic component method blocks did not have the
      mutator labeling them as such. This was fixed by explicitly setting the
      is_generic mutator along with the other mutators when these blocks are generated
      in the drawer.
      
      There was another issue where generic clock add blocks expected a time unit
      dropdown which only exists on the instance version of the clock add blocks. This
      was fixed by only setting the time unit if the block is not generic, since this
      attribute is only used in the instance version of these blocks.
      
      Change-Id: I9fb4bee9bef9fa76e40a240b587ec0b05ba86693
      d6cbce49
  23. 05 Jul, 2017 1 commit
    • Jeffrey I. Schiller's avatar
      Remove the “Beta” Tag · c829f1bf
      Jeffrey I. Schiller authored
      Remove the “Beta” tag from MIT App Inventor. Also remove the “2” as
      well.
      
      Change-Id: Ifed997d86e13b5f59a93e736f5caee7299ca1039
      c829f1bf
  24. 04 Jul, 2017 2 commits
    • Jeffrey I. Schiller's avatar
      Eliminate IllegalArgumentExceptions · b4800e4e
      Jeffrey I. Schiller authored
      If someone attempts to download a packaged project while a new build is
      running, we throw in IllegalArgumentException because the built apk is
      no longer present (the first thing a new build does is remove the old
      apk). This happens often enough that it is one of the top errors being
      logged by the Google Cloud Console.
      
      This change eliminates the IllegalArgumentException and instead just
      returns a “File Not Found” error (404 error) to the user attempting the
      download.
      
      Change-Id: I6fb92e51477c1ad93059cf57a449396d4fea0d7d
      b4800e4e
    • Jeffrey I. Schiller's avatar
      Update Companion Version to 2.43 · ead08b21
      Jeffrey I. Schiller authored
      Change-Id: I1166ec3b843665338e6fdd8155d1486cce23b7b7
      ead08b21
  25. 03 Jul, 2017 2 commits
    • Jeffrey I. Schiller's avatar
      Dutch Translation · 8a60b2ef
      Jeffrey I. Schiller authored
      Change-Id: Ic3deb5ee2bfe9ac98f3d0f64b6a98b987e2d36d6
      8a60b2ef
    • Jeffrey I. Schiller's avatar
      Change URL for TinyWebDB · d01b1568
      Jeffrey I. Schiller authored
      Update the URL to use tinywebdb.appinventor.mit.edu instead of at
      appspot.com. This gives us the flexibility to move the service from
      Google’s App Engine to a service hosted anywhere, including at MIT.
      
      Change-Id: I1f68f118e20f25740b7667b1efe93b2a1b925ce0
      d01b1568