Add smarter objects selector widget into Djblets

Review Request #10214 — Created Oct. 10, 2018 and submitted

Information

Djblets
master
25eac0d...

Reviewers

This change adds a smarter objects selector widget from Review Board 4.0
into Djblets. This is a form field widget and Backbone view, which must
be extended to be useful.

See /r/10215.

I ran all tests with ./tests/runtests.py. No errors were thrown.

With the /r/10215 Review Board patch, I navigated to
admin/db/scmtools/repository/add/. Next to "Users with access:", the
smarter user selector widget appeared. This widget extends the smarter
objects selector widget.

Description From Last Updated

Remove period from Summary.

gojeffchogojeffcho

Blank line between these.

brenniebrennie

You need to move this template into Djblets as well. If anyone were to use this outside of Review Board, …

brenniebrennie

E501 line too long (84 > 79 characters)

reviewbotreviewbot

E303 too many blank lines (2)

reviewbotreviewbot

E122 continuation line missing indentation or outdented

reviewbotreviewbot

This needs to be Djblets. not RB..

brenniebrennie

"This is to be used" sounds a bit awkward - if it must be used, I would specify that, or …

gojeffchogojeffcho

This comment is really confusing to me, especially the part that says "but the siteconfig field template special cases when …

shovenshoven

.related-object-selector might be a more clear class name (since it's for the relatedObjectSelectorView)?

shovenshoven

Could also use _.each($items, function($item) {...}); or $items.forEach(function($item) {...}); rather than a for loop (I typically subscribe to airbnb's Javascript …

shovenshoven

Typo: initalize --> initialize

ilawilaw

Capitalization is off here. "size" should be lower case, and "Related" should be upper.

daviddavid

Col: 38 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 25 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 29 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 28 Expected '{' and instead saw 'score'.

reviewbotreviewbot

Col: 37 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 36 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 32 'a_value' is defined but never used.

reviewbotreviewbot

Col: 41 'b_value' is defined but never used.

reviewbotreviewbot

Col: 33 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 40 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 56 Expected '{' and instead saw 'options'.

reviewbotreviewbot

Col: 52 Expected '{' and instead saw 'options'.

reviewbotreviewbot

Col: 64 Expected '{' and instead saw 'options'.

reviewbotreviewbot

Col: 26 'value' is defined but never used.

reviewbotreviewbot

Col: 48 'calculateScore' is defined but never used.

reviewbotreviewbot

Col: 22 Expected '{' and instead saw 'search'.

reviewbotreviewbot

Col: 9 'cmp' was used before it was defined.

reviewbotreviewbot

Col: 20 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 20 Expected '{' and instead saw 'return'.

reviewbotreviewbot

Col: 9 'extend' was used before it was defined.

reviewbotreviewbot

Col: 26 Expected '{' and instead saw 'continue'.

reviewbotreviewbot

Col: 9 'trim' was used before it was defined.

reviewbotreviewbot

Col: 9 'escape_regex' was used before it was defined.

reviewbotreviewbot

Col: 9 'is_array' was used before it was defined.

reviewbotreviewbot

Col: 9 'DIACRITICS' was used before it was defined.

reviewbotreviewbot

Col: 9 'asciifold' was used before it was defined.

reviewbotreviewbot

Col: 9 'utils' was used before it was defined.

reviewbotreviewbot

Col: 25 'endbit' is defined but never used.

reviewbotreviewbot

Col: 13 'key' is defined but never used.

reviewbotreviewbot

Col: 17 'timeout_blur' is defined but never used.

reviewbotreviewbot
brennie
  1. 
      
  2. djblets/forms/widgets.py (Diff revision 1)
     
     
     
    Show all issues

    Blank line between these.

  3. djblets/forms/widgets.py (Diff revision 1)
     
     

    This is used inside of Django to extract the value from the data and files dictionaries based on the name of the field (name).

    See the docs.

  4. 
      
brennie
  1. 
      
  2. djblets/forms/widgets.py (Diff revision 1)
     
     
    Show all issues

    You need to move this template into Djblets as well. If anyone were to use this outside of Review Board, they would get a template not found error.

  3. 
      
skaefer143
Review request changed
Change Summary:

I moved the JS Widgets into Djblets, and added a new initialization argument called using_avatars. This is because we can't assume in Djblets that the widget is using an avatar service.
I think this works for moving templates and JS files into Djblets, but let me know if I'm wrong.

Commit:
a14bf9f21bfea84a84f52667c1081f2c3b6afead
250c8898785a7c90a6067e09db05573a4873e8a1

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

skaefer143
skaefer143
skaefer143
skaefer143
brennie
  1. 
      
  2. Show all issues

    This needs to be Djblets. not RB..

  3. 
      
skaefer143
skaefer143
gojeffcho
  1. 
      
  2. Show all issues

    Remove period from Summary.

  3. djblets/forms/widgets.py (Diff revision 7)
     
     
    Show all issues

    "This is to be used" sounds a bit awkward - if it must be used, I would specify that, or if it is recommended but permissible, should be used, maybe? Or is it potentially better to change it to the imperative voice and say "Use this with..."?

  4. 
      
shoven
  1. 
      
  2. djblets/forms/widgets.py (Diff revision 7)
     
     
    Show all issues

    This comment is really confusing to me, especially the part that says "but the siteconfig field template special cases when is_hidden is True" (it seems like it's missing a verb perhaps?). If you could reword this comment a bit to make it a bit more clear that would be great!

  3. Show all issues

    .related-object-selector might be a more clear class name (since it's for the relatedObjectSelectorView)?

  4. Show all issues

    Could also use _.each($items, function($item) {...}); or $items.forEach(function($item) {...}); rather than a for loop (I typically subscribe to airbnb's Javascript guidelines which recommends something like this over for loops but maybe a mentor can weigh in on their preference for Javascript style).

    1. I didn't actually write this code, it came over from a previous implementation. I think this code has to do with placing items in the list if the text string is a different length in a different locale. I tried implementing your code, but it didn't work for me. I was getting some weird glitches, with the widget unable to select and display multiple objects. I might just be doing something wrong also. I'm going to leave the code as is. I did learn something new today though!

  5. 
      
skaefer143
david
  1. 
      
  2. djblets/static/djblets/css/defs.less (Diff revision 8)
     
     
    Show all issues

    Capitalization is off here. "size" should be lower case, and "Related" should be upper.

  3. 
      
ilaw
  1. 
      
  2. djblets/forms/widgets.py (Diff revision 8)
     
     
    Show all issues

    Typo: initalize --> initialize

  3. Maybe change wording to "to make necessary API requests"

  4. 
      
skaefer143
skaefer143
skaefer143
Review request changed
Change Summary:

move selectize.js out of reviewboard, into djblets.

Commit:
90464dea73be37de19dd8df0ba0358183a33d301
25eac0de866363b0725ee91d1a5d923a3f7f0c5a

Checks run (1 failed, 1 succeeded)

flake8 passed.
JSHint failed.

JSHint

david
  1. Going to make some small compat updates and land this. Thanks!

  2. 
      
skaefer143
Review request changed
Status:
Completed
Change Summary:
Pushed to release-2.0.x (17b1668)