             hits       : []
             search_str : null
             search_sel : null
+            submittable: false
             cat1_top   : ["Intro", "Tutorial", "Help"]
     hide: =>
         @set(show: false)

        lang       : rtypes.string.isRequired
        code       : rtypes.string
        descr      : rtypes.string
        cat0       : rtypes.string
        cat1       : rtypes.string
        cat2       : rtypes.number
        catlist0   : rtypes.arrayOf(rtypes.string)
        catlist1   : rtypes.arrayOf(rtypes.string)

            @init_data(DATA)
    data_lang: () ->
        @get('data').get(@get('lang'))
    get_catlist0: () ->
        @data_lang().keySeq().toArray().sort(@cat_sort)
    get_catlist1: () ->
        k0 = @get_catlist0()[@get('cat0')]
        @data_lang().get(k0).keySeq().toArray().sort(@cat_sort)
    get_catlist2: () ->
        k0 = @get_catlist0()[@get('cat0')]
        k1 = @get_catlist1()[@get('cat1')]
        @data_lang().getIn([k0, k1]).map((el) -> el.get(0)).toArray()
    select_lang: (lang) ->
        @reset()
        @set(lang: lang)
        catlist0 = @get_catlist0()
        @set(catlist0 : catlist0)
        if catlist0.length == 1
            @set_selected_category(0, 0)
    search: (search_str) ->
        @reset()
        if not search_str? or search_str.length == 0
