fmsystem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fmsystem-commits] [16910] Stable: Merge 16907:16909 from trunk


From: sigurdne
Subject: [Fmsystem-commits] [16910] Stable: Merge 16907:16909 from trunk
Date: Wed, 5 Jul 2017 08:27:06 -0400 (EDT)

Revision: 16910
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=16910
Author:   sigurdne
Date:     2017-07-05 08:27:05 -0400 (Wed, 05 Jul 2017)
Log Message:
-----------
Stable: Merge 16907:16909 from trunk

Modified Paths:
--------------
    branches/Version-2_0-branch/activitycalendar/setup/phpgw_no.lang
    branches/Version-2_0-branch/activitycalendar/templates/base/organization.xsl
    branches/Version-2_0-branch/admin/setup/phpgw_no.lang
    branches/Version-2_0-branch/bim/inc/class.menu.inc.php
    branches/Version-2_0-branch/booking/setup/phpgw_no.lang
    branches/Version-2_0-branch/bookingfrontend/setup/phpgw_no.lang
    branches/Version-2_0-branch/controller/setup/phpgw_no.lang
    branches/Version-2_0-branch/eventplanner/setup/phpgw_no.lang
    branches/Version-2_0-branch/frontend/inc/class.uidelegates.inc.php
    branches/Version-2_0-branch/frontend/setup/phpgw_no.lang
    branches/Version-2_0-branch/helpdesk/setup/phpgw_no.lang
    branches/Version-2_0-branch/phpgwapi/inc/class.jquery.inc.php
    branches/Version-2_0-branch/phpgwapi/js/jquery/jqTree/tree.jquery.js
    branches/Version-2_0-branch/phpgwapi/setup/phpgw_no.lang
    branches/Version-2_0-branch/property/setup/phpgw_no.lang
    branches/Version-2_0-branch/registration/setup/phpgw_no.lang
    branches/Version-2_0-branch/rental/setup/phpgw_no.lang

Added Paths:
-----------
    branches/Version-2_0-branch/bim/setup/phpgw_no.lang
    branches/Version-2_0-branch/sms/setup/phpgw_no.lang

Property Changed:
----------------
    branches/Version-2_0-branch/
    branches/Version-2_0-branch/booking/
    branches/Version-2_0-branch/bookingfrontend/

Index: branches/Version-2_0-branch
===================================================================
--- branches/Version-2_0-branch 2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch 2017-07-05 12:27:05 UTC (rev 16910)

Property changes on: branches/Version-2_0-branch
___________________________________________________________________
Modified: svn:mergeinfo
## -1,4 +1,4 ##
 /branches/dev-syncromind:13653
 /branches/dev-syncromind-2:14933-16846
 /branches/stavangerkommune:12743-12875,12986
-/trunk:14721-14732,14734-14735,14737,14739,14741,14743-14744,14746-14749,14751,14753,14755-14757,14759,14761-14764,14766-14768,14770-14783,14785-14792,14794-14813,14815-14816,14818,14820-14822,14824-14825,14827-14829,14831-14834,14836,14838,14840-14842,14844-14845,14847,14849-14866,14868-14869,14871,14873-14875,14877-14878,14880-14884,14886-14896,14898,14900-14902,14904,14906-14909,14911-14915,14917-14919,14921-14922,14924-14978,14980-15258,15260-15261,15263-15264,15266-15285,15287-15288,15290-15291,15293,15295,15297,15299-15305,15307-15310,15312-15335,15337-15352,15354,15356,15358,15360-15541,15543-15566,15568-15569,15571,15573-15581,15583,15585-15617,15619,15621-15630,15632-15635,15637-15639,15641-15643,15645,15647-15665,15667-15668,15670-15671,15673-15693,15695-15712,15714-15764,15766-15767,15769-15787,15789-15802,15804-15811,15813-15814,15816-15818,15820-15849,15851-15887,15889-15900,15902-16046,16048-16051,16053,16055,16057-16063,16065-16071,16073-16077,16079-16081,16083-16099,16101-16130,16132-16140,16142,16144-16212,16214-16219,16221,16223-16224,16226,16228-16229,16231,16233,16235,16237,16239-16240,16242,16244-16246,16248,16250-16251,16253-16255,16257-16259,16261,16263,16265,16267,16269-16276,16278,16280-16283,16285,16287-16288,16290,16292-16295,16297-16305,16307-16314,16316-16318,16320-16322,16324,16326-16330,16332,16334,16336,16338-16339,16341-16342,16344,16346,16348,16350,16352-16353,16355-16358,16360,16362,16364-16369,16371,16373,16375-16378,16380,16382-16383,16385,16387,16389,16391,16393-16395,16397,16399-16402,16404,16406,16408,16410-16415,16417,16419-16420,16422-16425,16427,16429-16440,16442,16444,16446,16448-16449,16451,16453,16455-16463,16465-16472,16474-16475,16477-16484,16486,16488,16490-16497,16499,16501-16503,16505-16512,16514-16517,16519,16521,16523,16525,16527-16532,16534,16536-16541,16543,16545-16554,16556,16558-16565,16567-16575,16577-16584,16586-16588,16590,16592-16593,16595-16596,16598,16600-16601,16603-16608,16610-16614,16616-16618,16620-16621,16623-16624,16626,16628,16630,16632-16638,16640,16642,16644,16646-16651,16653-16663,16665,16667,16669,16671,16673,16675,16677,16679-16680,16682,16684,16686,16688-16692,16694-16695,16697-16699,16701,16703,16705-16706,16708,16710,16712,16714,16716-16718,16720-16728,16730-16732,16734-16739,16741,16743-16746,16748-16750,16752-16755,16757,16759-16761,16763,16765,16767,16769-16774,16776,16778-16783,16785-16788,16790,16792,16794,16796-16802,16804-16807,16809,16811-16817,16819,16821-16825,16827-16831,16833,16835-16836,16838,16840-16844,16846-16847,16849,16851,16853-16854,16856-16859,16861,16863-16865,16867,16869-16871,16873,16875-16876,16878,16880-16881,16883,16885,16887-16888,16890,16892,16894-16900,16902,16904,16906
\ No newline at end of property
+/trunk:14721-14732,14734-14735,14737,14739,14741,14743-14744,14746-14749,14751,14753,14755-14757,14759,14761-14764,14766-14768,14770-14783,14785-14792,14794-14813,14815-14816,14818,14820-14822,14824-14825,14827-14829,14831-14834,14836,14838,14840-14842,14844-14845,14847,14849-14866,14868-14869,14871,14873-14875,14877-14878,14880-14884,14886-14896,14898,14900-14902,14904,14906-14909,14911-14915,14917-14919,14921-14922,14924-14978,14980-15258,15260-15261,15263-15264,15266-15285,15287-15288,15290-15291,15293,15295,15297,15299-15305,15307-15310,15312-15335,15337-15352,15354,15356,15358,15360-15541,15543-15566,15568-15569,15571,15573-15581,15583,15585-15617,15619,15621-15630,15632-15635,15637-15639,15641-15643,15645,15647-15665,15667-15668,15670-15671,15673-15693,15695-15712,15714-15764,15766-15767,15769-15787,15789-15802,15804-15811,15813-15814,15816-15818,15820-15849,15851-15887,15889-15900,15902-16046,16048-16051,16053,16055,16057-16063,16065-16071,16073-16077,16079-16081,16083-16099,16101-16130,16132-16140,16142,16144-16212,16214-16219,16221,16223-16224,16226,16228-16229,16231,16233,16235,16237,16239-16240,16242,16244-16246,16248,16250-16251,16253-16255,16257-16259,16261,16263,16265,16267,16269-16276,16278,16280-16283,16285,16287-16288,16290,16292-16295,16297-16305,16307-16314,16316-16318,16320-16322,16324,16326-16330,16332,16334,16336,16338-16339,16341-16342,16344,16346,16348,16350,16352-16353,16355-16358,16360,16362,16364-16369,16371,16373,16375-16378,16380,16382-16383,16385,16387,16389,16391,16393-16395,16397,16399-16402,16404,16406,16408,16410-16415,16417,16419-16420,16422-16425,16427,16429-16440,16442,16444,16446,16448-16449,16451,16453,16455-16463,16465-16472,16474-16475,16477-16484,16486,16488,16490-16497,16499,16501-16503,16505-16512,16514-16517,16519,16521,16523,16525,16527-16532,16534,16536-16541,16543,16545-16554,16556,16558-16565,16567-16575,16577-16584,16586-16588,16590,16592-16593,16595-16596,16598,16600-16601,16603-16608,16610-16614,16616-16618,16620-16621,16623-16624,16626,16628,16630,16632-16638,16640,16642,16644,16646-16651,16653-16663,16665,16667,16669,16671,16673,16675,16677,16679-16680,16682,16684,16686,16688-16692,16694-16695,16697-16699,16701,16703,16705-16706,16708,16710,16712,16714,16716-16718,16720-16728,16730-16732,16734-16739,16741,16743-16746,16748-16750,16752-16755,16757,16759-16761,16763,16765,16767,16769-16774,16776,16778-16783,16785-16788,16790,16792,16794,16796-16802,16804-16807,16809,16811-16817,16819,16821-16825,16827-16831,16833,16835-16836,16838,16840-16844,16846-16847,16849,16851,16853-16854,16856-16859,16861,16863-16865,16867,16869-16871,16873,16875-16876,16878,16880-16881,16883,16885,16887-16888,16890,16892,16894-16900,16902,16904,16906,16908-16909
\ No newline at end of property
Modified: branches/Version-2_0-branch/activitycalendar/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/activitycalendar/setup/phpgw_no.lang    
2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/activitycalendar/setup/phpgw_no.lang    
2017-07-05 12:27:05 UTC (rev 16910)
@@ -436,4 +436,8 @@
 contact_person_2_name  activitycalendar        no      Kontaktperson 2
 contact_person_2_phone activitycalendar        no      Kontaktperson 2 tlf
 contact_person_2_mail  activitycalendar        no      Kontaktperson 2 epost
-reject activitycalendar        no      Avvis organisasjon
\ No newline at end of file
+reject activitycalendar        no      Avvis organisasjon
+description    activitycalendar        no      Beskrivelse
+e-post activitycalendar        no      E-post
+list %1        activitycalendar        no      list %1
+select date    activitycalendar        no      Velg dato

Modified: 
branches/Version-2_0-branch/activitycalendar/templates/base/organization.xsl
===================================================================
--- 
branches/Version-2_0-branch/activitycalendar/templates/base/organization.xsl    
    2017-07-05 12:24:39 UTC (rev 16909)
+++ 
branches/Version-2_0-branch/activitycalendar/templates/base/organization.xsl    
    2017-07-05 12:27:05 UTC (rev 16910)
@@ -69,7 +69,7 @@
                                        </div>
                                        <div class="pure-control-group">
                                                <label>
-                                                       <xsl:value-of 
select="php:function('lang', 'Adresse')"/>
+                                                       <xsl:value-of 
select="php:function('lang', 'address')"/>
                                                </label>
                                                <input type="text" 
name="address" id="address" value="{address}"/>                                 
             
                                        </div>
@@ -82,7 +82,7 @@
                                        </div>
                                        <div class="pure-control-group">
                                                <label>
-                                                       <xsl:value-of 
select="php:function('lang', 'Beskrivelse')"/>
+                                                       <xsl:value-of 
select="php:function('lang', 'description')"/>
                                                </label>                        
                                
                                                <textarea rows="10" cols="100" 
id="org_description" name="org_description">
                                                        <xsl:value-of 
select="description"/>
@@ -209,7 +209,7 @@
                                        </div>
                                        <div class="pure-control-group">
                                                <label>
-                                                       <xsl:value-of 
select="php:function('lang', 'Adresse')"/>
+                                                       <xsl:value-of 
select="php:function('lang', 'address')"/>
                                                </label>
                                                <xsl:value-of 
select="address"/>                                        
                                        </div>
@@ -222,7 +222,7 @@
                                        </div>
                                        <div class="pure-control-group">
                                                <label>
-                                                       <xsl:value-of 
select="php:function('lang', 'Beskrivelse')"/>
+                                                       <xsl:value-of 
select="php:function('lang', 'description')"/>
                                                </label>                        
                                
                                                <xsl:value-of 
select="description"/>                                            
                                        </div>

Modified: branches/Version-2_0-branch/admin/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/admin/setup/phpgw_no.lang       2017-07-05 
12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/admin/setup/phpgw_no.lang       2017-07-05 
12:27:05 UTC (rev 16910)
@@ -39,4 +39,60 @@
 home screen message    admin   no      Melding på hjemmeskjerm
 title  admin   no      Overskrift
 important message      admin   no      Viktig informasjon
-enabled        admin   no      Aktiv
\ No newline at end of file
+enabled        admin   no      Aktiv
+(to install new applications use<br><a href=setup/" target="setup">setup</a> 
[manage applications] !!!)"       admin   no      (For å installere nye 
moduler, bruk<br><a href=setup/" target="setup">setup</a> [manage applications] 
!!!)"
+add a category admin   no      Legg til kategori
+add a section  admin   no      Legg til seksjon
+add a subcategory      admin   no      Legg til undekategori
+admins admin   no      Admins
+appearance     admin   no      Utseende
+attribute      admin   no      Atributt
+attributes     admin   no      Atributter
+attributes for this config section     admin   no      Atributter for denne 
konfigurasjonsseksjonen
+category list  admin   no      Kategoriliste
+check ip address of all sessions       admin   no      Kontroller IP-adresse 
for sesjoner
+close window   admin   no      Lukk vindu
+collect missing translations   admin   no      Finn manglende oversettinger
+config admin   no      Konfigurasjon
+delete all log records admin   no      Slett alle poster fra loggen
+delete this category   admin   no      Slett kategorien
+edit the config        admin   no      Endre konfigurasjon
+edit this category     admin   no      Endre kategorien
+email domain   admin   no      Email domene
+enter the background color for the login page  admin   no      Angi 
bakgrunnsfarge for innloggingssiden
+enter the background color for the site title  admin   no      Angi 
bakgrunnsfarge for nettstedstittelen
+enter the file name of your logo       admin   no      Angi filnavnet for logo
+enter the file name of your logo at login      admin   no      Angi filnavnet 
for logo for pålogging
+enter the search string. to show all entries, empty this field and press the 
submit button again       admin   no      Angi søkestreng. For a vise alle 
poster, tøm dette feltet og klikk på knappen igjen.
+enter the title for your site  admin   no      Angi tittel for nettstedet
+enter the title of your logo   admin   no      Angi tittel for logoen
+enter the url where your logo should link to   admin   no      Angi url for 
logo
+enter your smtp server password        admin   no      Angi ditt SMTP passord
+enter your smtp server user    admin   no      Angi ditt SMTP-server brukernavn
+fatal  admin   no      Fatal
+first page     admin   no      Første side
+installed applications admin   no      Innstallerte moduler
+language       admin   no      Språk
+line   admin   no      Linje
+list section   admin   no      List seksjon
+log message    admin   no      Loggmelding
+login screen   admin   no      Innlogging
+main screen    admin   no      Hovedside
+main screen message    admin   no      Melding på hovedside
+module admin   no      Modul
+section        admin   no      seksjon
+security       admin   no      Sikkerhet
+severity       admin   no      Alvorlighetsgrad
+smtp server port number        admin   no      SMTP server port nummer
+smtp server timeout    admin   no      smtp server timeout
+smtp settings  admin   no      SMTP configurasjon
+smtpdebug      admin   no      smtpdebug
+smtpsecure     admin   no      smtpsecure
+submit the search string       admin   no      Send søketekst
+support email address  admin   no      Epost brukerstøtte
+total records: %1      admin   no      Antall poster: %1
+use cookies to pass sessionid  admin   no      Bruk cookier til å håndtere 
sesjoner
+use smtp auth  admin   no      Bruk smtp autentisering
+users  admin   no      Brukere
+view the config        admin   no      Vis konfigurasjon
+warn   admin   no      Varsel

Modified: branches/Version-2_0-branch/bim/inc/class.menu.inc.php
===================================================================
--- branches/Version-2_0-branch/bim/inc/class.menu.inc.php      2017-07-05 
12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/bim/inc/class.menu.inc.php      2017-07-05 
12:27:05 UTC (rev 16910)
@@ -130,7 +130,7 @@
                        $menus['navigation']['item'] = array
             (
                                'url' => $GLOBALS['phpgw']->link('/index.php', 
array('menuaction' => 'bim.uiitem.index')),
-                'text' => lang('BIM_Items'),
+                'text' => lang('BIM Items'),
                 'image'        => array('bim', 'custom'),
                 'children'     => array_merge(array
                 (

Copied: branches/Version-2_0-branch/bim/setup/phpgw_no.lang (from rev 16909, 
trunk/bim/setup/phpgw_no.lang)
===================================================================
--- branches/Version-2_0-branch/bim/setup/phpgw_no.lang                         
(rev 0)
+++ branches/Version-2_0-branch/bim/setup/phpgw_no.lang 2017-07-05 12:27:05 UTC 
(rev 16910)
@@ -0,0 +1,3 @@
+bim items      bim     no      Bim komponenter
+ifc    bim     no      IFC
+upload model   bim     no      Last opp modell

Index: branches/Version-2_0-branch/booking
===================================================================
--- branches/Version-2_0-branch/booking 2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/booking 2017-07-05 12:27:05 UTC (rev 16910)

Property changes on: branches/Version-2_0-branch/booking
___________________________________________________________________
Modified: svn:mergeinfo
## -1,3 +1,3 ##
 /branches/dev-syncromind-2/booking:14933-16846
 /branches/stavangerkommune/booking:9468-12740,12743-12875,12986
-/trunk/booking:14721-14732,14824-14825,14827-14829,14831-14834,14836,14838,14840-14842,14844-14845,14871,14886-14896,14900-14902,14917-14919,14924-14978,14980-15258,15266-15285,15287-15288,15297,15299-15305,15307-15310,15312-15335,15337-15352,15354,15360-15541,15543-15566,15568-15569,15585-15617,15621-15630,15637-15639,15641-15643,15645,15647-15665,15667-15668,15695-15712,15714-15764,15820-15849,15889-15900,15902-16046,16055,16101-16130,16144-16212,16297-16305,16307-16314,16393-16395,16490-16497,16514-16517,16534,16567-16575,16577-16584,16586-16588,16590,16592-16593,16595-16596,16598,16616-16618,16730,16734-16739,16748-16750,16769-16774,16785-16788,16796-16802,16835-16836,16846-16847,16883,16885
\ No newline at end of property
+/trunk/booking:14721-14732,14824-14825,14827-14829,14831-14834,14836,14838,14840-14842,14844-14845,14871,14886-14896,14900-14902,14917-14919,14924-14978,14980-15258,15266-15285,15287-15288,15297,15299-15305,15307-15310,15312-15335,15337-15352,15354,15360-15541,15543-15566,15568-15569,15585-15617,15621-15630,15637-15639,15641-15643,15645,15647-15665,15667-15668,15695-15712,15714-15764,15820-15849,15889-15900,15902-16046,16055,16101-16130,16144-16212,16297-16305,16307-16314,16393-16395,16490-16497,16514-16517,16534,16567-16575,16577-16584,16586-16588,16590,16592-16593,16595-16596,16598,16616-16618,16730,16734-16739,16748-16750,16769-16774,16785-16788,16796-16802,16835-16836,16846-16847,16883,16885,16908-16909
\ No newline at end of property
Modified: branches/Version-2_0-branch/booking/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/booking/setup/phpgw_no.lang     2017-07-05 
12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/booking/setup/phpgw_no.lang     2017-07-05 
12:27:05 UTC (rev 16910)
@@ -678,4 +678,31 @@
 organzations_ids_description   booking no      Her kan du legge inn en komma 
separert liste med organisasjons IDer som vil få epost viss noen avbestiller 
denne ressursen.
 organzations_ids       booking no      Organisasjons IDer
 cost history   booking no      Prishistorikk
-extra info     booking no      Tileggsinformasjon
\ No newline at end of file
+extra info     booking no      Tileggsinformasjon
+add group      booking no      Legg til gruppe
+agegroups      booking no      Aldersgruppee
+booking edit   booking no      Endre booking
+booking new    booking no      Ny booking
+building_name  booking no      Bygningsnavn
+custom field groups    booking no      Gruppe av tilpassede felt
+end date       booking no      Slutt dato
+entity %1 has been saved       booking no      Post %1 er lagret
+entity %1 has been updated     booking no      Post %1 er oppdatert
+minute booking no      Minutt
+please enter a building        booking no      Velg en bygning
+please enter a building name   booking no      Angi et bygningsnavn
+please enter a contact name    booking no      Angi en kontakt
+please enter a description     booking no      Angi en beskrivelse
+please enter a organization    booking no      Angi en organisasjon
+please enter a start date      booking no      Angi en startdato
+please enter a valid end date  booking no      Angi en gyldig sluttdato
+please enter a valid from date booking no      Angi en gyldig startdato
+please enter an end date       booking no      Angi en sluttdato
+please enter an valid end date booking no      Angi en gyldig dato
+please select a customer type  booking no      Velg en kundetype
+please select a group  booking no      Velg en gruppe
+please select a season booking no      Velg en sesong
+please select an activity      booking no      Velg en aktivitet
+select date    booking no      Velg dato
+start date     booking no      Start dato
+toggle show inactive   booking no      Veklse på å vise inaktive

Index: branches/Version-2_0-branch/bookingfrontend
===================================================================
--- branches/Version-2_0-branch/bookingfrontend 2017-07-05 12:24:39 UTC (rev 
16909)
+++ branches/Version-2_0-branch/bookingfrontend 2017-07-05 12:27:05 UTC (rev 
16910)

Property changes on: branches/Version-2_0-branch/bookingfrontend
___________________________________________________________________
Modified: svn:mergeinfo
## -1,3 +1,3 ##
 /branches/dev-syncromind-2/bookingfrontend:14933-16846
 /branches/stavangerkommune/bookingfrontend:9468-12740,12986
-/trunk/bookingfrontend:14721-14732,14770-14783,14794-14808,14824-14825,14838,14886-14894,14906-14909,14917-14919,14924-14978,14980-15258,15297,15312-15335,15585-15617,15621-15630,15714-15764,15813-15814,15820-15849,15889-15900,15902-16046,16101-16130,16144-16212,16297-16305,16307-16314,16316-16318,16385,16387,16393-16395,16399-16402,16586-16588,16603-16608,16734-16739,16752-16755,16785-16788,16796-16802,16835-16836,16846-16847
\ No newline at end of property
+/trunk/bookingfrontend:14721-14732,14770-14783,14794-14808,14824-14825,14838,14886-14894,14906-14909,14917-14919,14924-14978,14980-15258,15297,15312-15335,15585-15617,15621-15630,15714-15764,15813-15814,15820-15849,15889-15900,15902-16046,16101-16130,16144-16212,16297-16305,16307-16314,16316-16318,16385,16387,16393-16395,16399-16402,16586-16588,16603-16608,16734-16739,16752-16755,16785-16788,16796-16802,16835-16836,16846-16847,16908-16909
\ No newline at end of property
Modified: branches/Version-2_0-branch/bookingfrontend/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/bookingfrontend/setup/phpgw_no.lang     
2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/bookingfrontend/setup/phpgw_no.lang     
2017-07-05 12:27:05 UTC (rev 16910)
@@ -391,3 +391,9 @@
 You can't change resources to the event, for that contact administrator        
bookingfrontend no      Du kan ikke forandre på ressurser, for det må du 
kontakte administrator
 Cancelation of booking from    bookingfrontend no      Avbestilling fra
 Deleted on     bookingfrontend no      Avbestilling i
+entity %1 has been saved       bookingfrontend no      Post %1 er lagret
+entity %1 has been updated     bookingfrontend no      Post %1 er oppdatert
+minute bookingfrontend no      Minutt
+please enter a building name   bookingfrontend no      Angi et bygningsnavn
+please select an activity      bookingfrontend no      Velg en aktivitet
+select date    bookingfrontend no      Velg dato

Modified: branches/Version-2_0-branch/controller/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/controller/setup/phpgw_no.lang  2017-07-05 
12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/controller/setup/phpgw_no.lang  2017-07-05 
12:27:05 UTC (rev 16910)
@@ -392,4 +392,5 @@
 report type    controller      no      Rapporttype
 lang_control_mandatory_location        controller      no      Påkrevd 
lokasjonsvalg
 Control types  controller      no      Kontrolltyper
-location       controller      no      Lokasjon
\ No newline at end of file
+location       controller      no      Lokasjon
+document types controller      no      Dokumenttyper
\ No newline at end of file

Modified: branches/Version-2_0-branch/eventplanner/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/eventplanner/setup/phpgw_no.lang        
2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/eventplanner/setup/phpgw_no.lang        
2017-07-05 12:27:05 UTC (rev 16910)
@@ -133,4 +133,20 @@
 vendor receipt text    eventplanner    no      utøvernotat ved kvittering
 customer receipt text  eventplanner    no      Mottakerstednotat ved kvittering
 receipt subject        eventplanner    no      Kvitteringsoverskrift
-datetime event eventplanner    no      Dato/tid for arrangement
\ No newline at end of file
+datetime event eventplanner    no      Dato/tid for arrangement
+add type       eventplanner    no      Legg til type
+application category   eventplanner    no      Søknadskategori
+application type       eventplanner    no      Søknadstype
+back to the ticket list        eventplanner    no      Tilbake til oversikten
+completed      eventplanner    no      fullført
+custom field groups    eventplanner    no      Gruppe av tilpassede felt
+customer category      eventplanner    no      Tilpasset kategory
+minute eventplanner    no      Minutt
+select date    eventplanner    no      Velg dato
+type   eventplanner    no      Type
+vendor category        eventplanner    no      Leverandør kategori
+add type       eventplannerfrontend    no      Legg til type
+all    eventplannerfrontend    no      Alle
+back to the ticket list        eventplannerfrontend    no      Tilbake til 
oversikten
+completed      eventplannerfrontend    no      fullført
+type   eventplannerfrontend    no      Type

Modified: branches/Version-2_0-branch/frontend/inc/class.uidelegates.inc.php
===================================================================
--- branches/Version-2_0-branch/frontend/inc/class.uidelegates.inc.php  
2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/frontend/inc/class.uidelegates.inc.php  
2017-07-05 12:27:05 UTC (rev 16910)
@@ -184,7 +184,7 @@
                        $delegateLimit = $config->config_data['delegate_limit'];
                        if (!is_numeric($delegateLimit))
                                $delegateLimit = 3;
-                       $error_message = lang('max_x_delegates', 
$delegateLimit);
+                       $error_message = lang('max %1 delegates', 
$delegateLimit);
 
                        //$msglog = 
phpgwapi_cache::session_get('frontend','msgbox');
                        phpgwapi_cache::session_clear('frontend', 'msgbox');

Modified: branches/Version-2_0-branch/frontend/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/frontend/setup/phpgw_no.lang    2017-07-05 
12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/frontend/setup/phpgw_no.lang    2017-07-05 
12:27:05 UTC (rev 16910)
@@ -131,4 +131,7 @@
 message_empty  frontend        no      Meldingen kan ikke være tom
 upload_userdoc frontend        no      Last opp brukerveiledning
 filename       frontend        no      Filnavn
-contracts      frontend        no      Kontrakt
\ No newline at end of file
+contracts      frontend        no      Kontrakt
+max %1 delegates       frontend        no      Maximum %1 delegerte
+monthly        frontend        no      Månedlig
+remark frontend        no      Merknad

Modified: branches/Version-2_0-branch/helpdesk/setup/phpgw_no.lang
===================================================================
--- branches/Version-2_0-branch/helpdesk/setup/phpgw_no.lang    2017-07-05 
12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/helpdesk/setup/phpgw_no.lang    2017-07-05 
12:27:05 UTC (rev 16910)
@@ -207,4 +207,11 @@
 close message  helpdesk        no      Svarmelding ved avsluttet sak
 list %1        helpdesk        no      List %1
 public helpdesk        no      synlig for alle
-open edit in new window        helpdesk        no      Editer i nytt vindu
\ No newline at end of file
+open edit in new window        helpdesk        no      Editer i nytt vindu
+columns is updated     helpdesk        no      Kolonner er oppdatert
+select column  helpdesk        no      Velg kolonne
+target helpdesk        no      Mål
+ticket attributes      helpdesk        no      Meldingsattributter
+ticket categories      helpdesk        no      Meldingskategorier
+ticket status  helpdesk        no      Meldingsstatus
+url    helpdesk        no      Url

Modified: branches/Version-2_0-branch/phpgwapi/inc/class.jquery.inc.php
===================================================================
--- branches/Version-2_0-branch/phpgwapi/inc/class.jquery.inc.php       
2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/phpgwapi/inc/class.jquery.inc.php       
2017-07-05 12:27:05 UTC (rev 16910)
@@ -171,7 +171,6 @@
                                        $load = array(
                                                "js/{$_jquery_core}{$_type}",
                                                "jqTree/tree.jquery",
-                                               "jqTree/tree.cookie",
                                        );
                                        
$GLOBALS['phpgw']->css->add_external_file("phpgwapi/js/jquery/jqTree/jqtree.css");
                                        break;

Modified: branches/Version-2_0-branch/phpgwapi/js/jquery/jqTree/tree.jquery.js
===================================================================
--- branches/Version-2_0-branch/phpgwapi/js/jquery/jqTree/tree.jquery.js        
2017-07-05 12:24:39 UTC (rev 16909)
+++ branches/Version-2_0-branch/phpgwapi/js/jquery/jqTree/tree.jquery.js        
2017-07-05 12:27:05 UTC (rev 16910)
@@ -1,2552 +1,1705 @@
-/*
-JqTree 1.3.7
+/*!
+ * JqTree 1.4.1
+ *
+ * Copyright 2017 Marco Braak
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+/******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, 
module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // identity function for calling harmony imports with the 
correct context
+/******/       __webpack_require__.i = function(value) { return value; };
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, {
+/******/                               configurable: false,
+/******/                               enumerable: true,
+/******/                               get: getter
+/******/                       });
+/******/               }
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony 
modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return 
module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return 
Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 19);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
 
-Copyright 2015 Marco Braak
+"use strict";
 
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof 
require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var 
f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var 
l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return 
s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof 
require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return 
s})({1:[function(require,module,exports){
-var $, DragAndDropHandler, DragElement, HitAreasGenerator, Position, 
VisibleNodeIterator, node_module, util,
-  extend = function(child, parent) { for (var key in parent) { if 
(hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { 
this.constructor = child; } ctor.prototype = parent.prototype; child.prototype 
= new ctor(); child.__super__ = parent.prototype; return child; },
-  hasProp = {}.hasOwnProperty;
-
-node_module = require('./node');
-
-util = require('./util');
-
-Position = node_module.Position;
-
-$ = jQuery;
-
-DragAndDropHandler = (function() {
-  function DragAndDropHandler(tree_widget) {
-    this.tree_widget = tree_widget;
-    this.hovered_area = null;
-    this.$ghost = null;
-    this.hit_areas = [];
-    this.is_dragging = false;
-    this.current_item = null;
-  }
-
-  DragAndDropHandler.prototype.mouseCapture = function(position_info) {
-    var $element, node_element;
-    $element = $(position_info.target);
-    if (!this.mustCaptureElement($element)) {
-      return null;
+exports.__esModule = true;
+var Position;
+(function (Position) {
+    Position[Position["Before"] = 1] = "Before";
+    Position[Position["After"] = 2] = "After";
+    Position[Position["Inside"] = 3] = "Inside";
+    Position[Position["None"] = 4] = "None";
+})(Position = exports.Position || (exports.Position = {}));
+exports.position_names = {
+    before: Position.Before,
+    after: Position.After,
+    inside: Position.Inside,
+    none: Position.None
+};
+function getPositionName(position) {
+    for (var name_1 in exports.position_names) {
+        if (exports.position_names.hasOwnProperty(name_1)) {
+            if (exports.position_names[name_1] === position) {
+                return name_1;
+            }
+        }
     }
-    if (this.tree_widget.options.onIsMoveHandle && 
!this.tree_widget.options.onIsMoveHandle($element)) {
-      return null;
-    }
-    node_element = this.tree_widget._getNodeElement($element);
-    if (node_element && this.tree_widget.options.onCanMove) {
-      if (!this.tree_widget.options.onCanMove(node_element.node)) {
-        node_element = null;
-      }
-    }
-    this.current_item = node_element;
-    return this.current_item !== null;
-  };
-
-  DragAndDropHandler.prototype.mouseStart = function(position_info) {
-    var node, node_name, offset;
-    this.refresh();
-    offset = $(position_info.target).offset();
-    node = this.current_item.node;
-    if (this.tree_widget.options.autoEscape) {
-      node_name = util.html_escape(node.name);
-    } else {
-      node_name = node.name;
-    }
-    this.drag_element = new DragElement(node_name, position_info.page_x - 
offset.left, position_info.page_y - offset.top, this.tree_widget.element);
-    this.is_dragging = true;
-    this.current_item.$element.addClass('jqtree-moving');
-    return true;
-  };
-
-  DragAndDropHandler.prototype.mouseDrag = function(position_info) {
-    var area, can_move_to;
-    this.drag_element.move(position_info.page_x, position_info.page_y);
-    area = this.findHoveredArea(position_info.page_x, position_info.page_y);
-    can_move_to = this.canMoveToArea(area);
-    if (can_move_to && area) {
-      if (!area.node.isFolder()) {
-        this.stopOpenFolderTimer();
-      }
-      if (this.hovered_area !== area) {
-        this.hovered_area = area;
-        if (this.mustOpenFolderTimer(area)) {
-          this.startOpenFolderTimer(area.node);
-        } else {
-          this.stopOpenFolderTimer();
+    return "";
+}
+exports.getPositionName = getPositionName;
+function getPosition(name) {
+    return exports.position_names[name];
+}
+exports.getPosition = getPosition;
+var Node = (function () {
+    function Node(o, is_root, node_class) {
+        if (is_root === void 0) { is_root = false; }
+        if (node_class === void 0) { node_class = Node; }
+        this.name = "";
+        this.setData(o);
+        this.children = [];
+        this.parent = null;
+        if (is_root) {
+            this.id_mapping = {};
+            this.tree = this;
+            this.node_class = node_class;
         }
-        this.updateDropHint();
-      }
-    } else {
-      this.removeHover();
-      this.removeDropHint();
-      this.stopOpenFolderTimer();
     }
-    if (!area) {
-      if (this.tree_widget.options.onDragMove != null) {
-        this.tree_widget.options.onDragMove(this.current_item.node, 
position_info.original_event);
-      }
-    }
-    return true;
-  };
+    /*
+    Set the data of this node.
 
-  DragAndDropHandler.prototype.mustCaptureElement = function($element) {
-    return !$element.is('input,select,textarea');
-  };
+    setData(string): set the name of the node
+    setdata(object): set attributes of the node
 
-  DragAndDropHandler.prototype.canMoveToArea = function(area) {
-    var position_name;
-    if (!area) {
-      return false;
-    } else if (this.tree_widget.options.onCanMoveTo) {
-      position_name = Position.getName(area.position);
-      return this.tree_widget.options.onCanMoveTo(this.current_item.node, 
area.node, position_name);
-    } else {
-      return true;
-    }
-  };
+    Examples:
+        setdata('node1')
 
-  DragAndDropHandler.prototype.mouseStop = function(position_info) {
-    var current_item;
-    this.moveItem(position_info);
-    this.clear();
-    this.removeHover();
-    this.removeDropHint();
-    this.removeHitAreas();
-    current_item = this.current_item;
-    if (this.current_item) {
-      this.current_item.$element.removeClass('jqtree-moving');
-      this.current_item = null;
-    }
-    this.is_dragging = false;
-    if (!this.hovered_area && current_item) {
-      if (this.tree_widget.options.onDragStop != null) {
-        this.tree_widget.options.onDragStop(current_item.node, 
position_info.original_event);
-      }
-    }
-    return false;
-  };
+        setData({ name: 'node1', id: 1});
 
-  DragAndDropHandler.prototype.refresh = function() {
-    this.removeHitAreas();
-    if (this.current_item) {
-      this.generateHitAreas();
-      this.current_item = 
this.tree_widget._getNodeElementForNode(this.current_item.node);
-      if (this.is_dragging) {
-        return this.current_item.$element.addClass('jqtree-moving');
-      }
-    }
-  };
+        setData({ name: 'node2', id: 2, color: 'green'});
 
-  DragAndDropHandler.prototype.removeHitAreas = function() {
-    return this.hit_areas = [];
-  };
-
-  DragAndDropHandler.prototype.clear = function() {
-    this.drag_element.remove();
-    return this.drag_element = null;
-  };
-
-  DragAndDropHandler.prototype.removeDropHint = function() {
-    if (this.previous_ghost) {
-      return this.previous_ghost.remove();
-    }
-  };
-
-  DragAndDropHandler.prototype.removeHover = function() {
-    return this.hovered_area = null;
-  };
-
-  DragAndDropHandler.prototype.generateHitAreas = function() {
-    var hit_areas_generator;
-    hit_areas_generator = new HitAreasGenerator(this.tree_widget.tree, 
this.current_item.node, this.getTreeDimensions().bottom);
-    return this.hit_areas = hit_areas_generator.generate();
-  };
-
-  DragAndDropHandler.prototype.findHoveredArea = function(x, y) {
-    var area, dimensions, high, low, mid;
-    dimensions = this.getTreeDimensions();
-    if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y 
> dimensions.bottom) {
-      return null;
-    }
-    low = 0;
-    high = this.hit_areas.length;
-    while (low < high) {
-      mid = (low + high) >> 1;
-      area = this.hit_areas[mid];
-      if (y < area.top) {
-        high = mid;
-      } else if (y > area.bottom) {
-        low = mid + 1;
-      } else {
-        return area;
-      }
-    }
-    return null;
-  };
-
-  DragAndDropHandler.prototype.mustOpenFolderTimer = function(area) {
-    var node;
-    node = area.node;
-    return node.isFolder() && !node.is_open && area.position === 
Position.INSIDE;
-  };
-
-  DragAndDropHandler.prototype.updateDropHint = function() {
-    var node_element;
-    if (!this.hovered_area) {
-      return;
-    }
-    this.removeDropHint();
-    node_element = 
this.tree_widget._getNodeElementForNode(this.hovered_area.node);
-    return this.previous_ghost = 
node_element.addDropHint(this.hovered_area.position);
-  };
-
-  DragAndDropHandler.prototype.startOpenFolderTimer = function(folder) {
-    var openFolder;
-    openFolder = (function(_this) {
-      return function() {
-        return _this.tree_widget._openNode(folder, 
_this.tree_widget.options.slide, function() {
-          _this.refresh();
-          return _this.updateDropHint();
-        });
-      };
-    })(this);
-    this.stopOpenFolderTimer();
-    return this.open_folder_timer = setTimeout(openFolder, 
this.tree_widget.options.openFolderDelay);
-  };
-
-  DragAndDropHandler.prototype.stopOpenFolderTimer = function() {
-    if (this.open_folder_timer) {
-      clearTimeout(this.open_folder_timer);
-      return this.open_folder_timer = null;
-    }
-  };
-
-  DragAndDropHandler.prototype.moveItem = function(position_info) {
-    var doMove, event, moved_node, position, previous_parent, target_node;
-    if (this.hovered_area && this.hovered_area.position !== Position.NONE && 
this.canMoveToArea(this.hovered_area)) {
-      moved_node = this.current_item.node;
-      target_node = this.hovered_area.node;
-      position = this.hovered_area.position;
-      previous_parent = moved_node.parent;
-      if (position === Position.INSIDE) {
-        this.hovered_area.node.is_open = true;
-      }
-      doMove = (function(_this) {
-        return function() {
-          _this.tree_widget.tree.moveNode(moved_node, target_node, position);
-          _this.tree_widget.element.empty();
-          return _this.tree_widget._refreshElements();
+    * This is an internal function; it is not in the docs
+    * Does not remove existing node values
+    */
+    Node.prototype.setData = function (o) {
+        var _this = this;
+        var setName = function (name) {
+            if (name != null) {
+                _this.name = name;
+            }
         };
-      })(this);
-      event = this.tree_widget._triggerEvent('tree.move', {
-        move_info: {
-          moved_node: moved_node,
-          target_node: target_node,
-          position: Position.getName(position),
-          previous_parent: previous_parent,
-          do_move: doMove,
-          original_event: position_info.original_event
+        if (!o) {
+            return;
         }
-      });
-      if (!event.isDefaultPrevented()) {
-        return doMove();
-      }
-    }
-  };
-
-  DragAndDropHandler.prototype.getTreeDimensions = function() {
-    var offset;
-    offset = this.tree_widget.element.offset();
-    return {
-      left: offset.left,
-      top: offset.top,
-      right: offset.left + this.tree_widget.element.width(),
-      bottom: offset.top + this.tree_widget.element.height() + 16
+        else if (typeof o !== "object") {
+            setName(o);
+        }
+        else {
+            for (var key in o) {
+                if (o.hasOwnProperty(key)) {
+                    var value = o[key];
+                    if (key === "label") {
+                        // You can use the 'label' key instead of 'name'; this 
is a legacy feature
+                        setName(value);
+                    }
+                    else if (key !== "children") {
+                        // You can't update the children using this function
+                        this[key] = value;
+                    }
+                }
+            }
+        }
     };
-  };
+    /*
+    Create tree from data.
 
-  return DragAndDropHandler;
-
-})();
-
-VisibleNodeIterator = (function() {
-  function VisibleNodeIterator(tree) {
-    this.tree = tree;
-  }
-
-  VisibleNodeIterator.prototype.iterate = function() {
-    var _iterateNode, is_first_node;
-    is_first_node = true;
-    _iterateNode = (function(_this) {
-      return function(node, next_node) {
-        var $element, child, children_length, i, j, len, must_iterate_inside, 
ref;
-        must_iterate_inside = (node.is_open || !node.element) && 
node.hasChildren();
-        if (node.element) {
-          $element = $(node.element);
-          if (!$element.is(':visible')) {
-            return;
-          }
-          if (is_first_node) {
-            _this.handleFirstNode(node, $element);
-            is_first_node = false;
-          }
-          if (!node.hasChildren()) {
-            _this.handleNode(node, next_node, $element);
-          } else if (node.is_open) {
-            if (!_this.handleOpenFolder(node, $element)) {
-              must_iterate_inside = false;
-            }
-          } else {
-            _this.handleClosedFolder(node, next_node, $element);
-          }
+    Structure of data is:
+    [
+        {
+            label: 'node1',
+            children: [
+                { label: 'child1' },
+                { label: 'child2' }
+            ]
+        },
+        {
+            label: 'node2'
         }
-        if (must_iterate_inside) {
-          children_length = node.children.length;
-          ref = node.children;
-          for (i = j = 0, len = ref.length; j < len; i = ++j) {
-            child = ref[i];
-            if (i === (children_length - 1)) {
-              _iterateNode(node.children[i], null);
-            } else {
-              _iterateNode(node.children[i], node.children[i + 1]);
+    ]
+    */
+    Node.prototype.loadFromData = function (data) {
+        this.removeChildren();
+        for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {
+            var o = data_1[_i];
+            var node = new this.tree.node_class(o);
+            this.addChild(node);
+            if (typeof o === "object" && o["children"]) {
+                node.loadFromData(o["children"]);
             }
-          }
-          if (node.is_open) {
-            return _this.handleAfterOpenFolder(node, next_node, $element);
-          }
         }
-      };
-    })(this);
-    return _iterateNode(this.tree, null);
-  };
+    };
+    /*
+    Add child.
 
-  VisibleNodeIterator.prototype.handleNode = function(node, next_node, 
$element) {};
+    tree.addChild(
+        new Node('child1')
+    );
+    */
+    Node.prototype.addChild = function (node) {
+        this.children.push(node);
+        node._setParent(this);
+    };
+    /*
+    Add child at position. Index starts at 0.
 
-  VisibleNodeIterator.prototype.handleOpenFolder = function(node, $element) {};
+    tree.addChildAtPosition(
+        new Node('abc'),
+        1
+    );
+    */
+    Node.prototype.addChildAtPosition = function (node, index) {
+        this.children.splice(index, 0, node);
+        node._setParent(this);
+    };
+    /*
+    Remove child. This also removes the children of the node.
 
-  VisibleNodeIterator.prototype.handleClosedFolder = function(node, next_node, 
$element) {};
+    tree.removeChild(tree.children[0]);
+    */
+    Node.prototype.removeChild = function (node) {
+        // remove children from the index
+        node.removeChildren();
+        this._removeChild(node);
+    };
+    /*
+    Get child index.
 
-  VisibleNodeIterator.prototype.handleAfterOpenFolder = function(node, 
next_node, $element) {};
-
-  VisibleNodeIterator.prototype.handleFirstNode = function(node, $element) {};
-
-  return VisibleNodeIterator;
-
-})();
-
-HitAreasGenerator = (function(superClass) {
-  extend(HitAreasGenerator, superClass);
-
-  function HitAreasGenerator(tree, current_node, tree_bottom) {
-    HitAreasGenerator.__super__.constructor.call(this, tree);
-    this.current_node = current_node;
-    this.tree_bottom = tree_bottom;
-  }
-
-  HitAreasGenerator.prototype.generate = function() {
-    this.positions = [];
-    this.last_top = 0;
-    this.iterate();
-    return this.generateHitAreas(this.positions);
-  };
-
-  HitAreasGenerator.prototype.getTop = function($element) {
-    return $element.offset().top;
-  };
-
-  HitAreasGenerator.prototype.addPosition = function(node, position, top) {
-    var area;
-    area = {
-      top: top,
-      node: node,
-      position: position
+    var index = getChildIndex(node);
+    */
+    Node.prototype.getChildIndex = function (node) {
+        return $.inArray(node, this.children);
     };
-    this.positions.push(area);
-    return this.last_top = top;
-  };
+    /*
+    Does the tree have children?
 
-  HitAreasGenerator.prototype.handleNode = function(node, next_node, $element) 
{
-    var top;
-    top = this.getTop($element);
-    if (node === this.current_node) {
-      this.addPosition(node, Position.NONE, top);
-    } else {
-      this.addPosition(node, Position.INSIDE, top);
+    if (tree.hasChildren()) {
+        //
     }
-    if (next_node === this.current_node || node === this.current_node) {
-      return this.addPosition(node, Position.NONE, top);
-    } else {
-      return this.addPosition(node, Position.AFTER, top);
-    }
-  };
+    */
+    Node.prototype.hasChildren = function () {
+        return this.children.length !== 0;
+    };
+    Node.prototype.isFolder = function () {
+        return this.hasChildren() || this.load_on_demand;
+    };
+    /*
+    Iterate over all the nodes in the tree.
 
-  HitAreasGenerator.prototype.handleOpenFolder = function(node, $element) {
-    if (node === this.current_node) {
-      return false;
-    }
-    if (node.children[0] !== this.current_node) {
-      this.addPosition(node, Position.INSIDE, this.getTop($element));
-    }
-    return true;
-  };
+    Calls callback with (node, level).
 
-  HitAreasGenerator.prototype.handleClosedFolder = function(node, next_node, 
$element) {
-    var top;
-    top = this.getTop($element);
-    if (node === this.current_node) {
-      return this.addPosition(node, Position.NONE, top);
-    } else {
-      this.addPosition(node, Position.INSIDE, top);
-      if (next_node !== this.current_node) {
-        return this.addPosition(node, Position.AFTER, top);
-      }
-    }
-  };
+    The callback must return true to continue the iteration on current node.
 
-  HitAreasGenerator.prototype.handleFirstNode = function(node, $element) {
-    if (node !== this.current_node) {
-      return this.addPosition(node, Position.BEFORE, 
this.getTop($(node.element)));
-    }
-  };
+    tree.iterate(
+        function(node, level) {
+           console.log(node.name);
 
-  HitAreasGenerator.prototype.handleAfterOpenFolder = function(node, 
next_node, $element) {
-    if (node === this.current_node.node || next_node === 
this.current_node.node) {
-      return this.addPosition(node, Position.NONE, this.last_top);
-    } else {
-      return this.addPosition(node, Position.AFTER, this.last_top);
-    }
-  };
-
-  HitAreasGenerator.prototype.generateHitAreas = function(positions) {
-    var group, hit_areas, j, len, position, previous_top;
-    previous_top = -1;
-    group = [];
-    hit_areas = [];
-    for (j = 0, len = positions.length; j < len; j++) {
-      position = positions[j];
-      if (position.top !== previous_top && group.length) {
-        if (group.length) {
-          this.generateHitAreasForGroup(hit_areas, group, previous_top, 
position.top);
+           // stop iteration after level 2
+           return (level <= 2);
         }
-        previous_top = position.top;
-        group = [];
-      }
-      group.push(position);
-    }
-    this.generateHitAreasForGroup(hit_areas, group, previous_top, 
this.tree_bottom);
-    return hit_areas;
-  };
+    );
 
-  HitAreasGenerator.prototype.generateHitAreasForGroup = function(hit_areas, 
positions_in_group, top, bottom) {
-    var area_height, area_top, i, position, position_count;
-    position_count = Math.min(positions_in_group.length, 4);
-    area_height = Math.round((bottom - top) / position_count);
-    area_top = top;
-    i = 0;
-    while (i < position_count) {
-      position = positions_in_group[i];
-      hit_areas.push({
-        top: area_top,
-        bottom: area_top + area_height,
-        node: position.node,
-        position: position.position
-      });
-      area_top += area_height;
-      i += 1;
-    }
-    return null;
-  };
+    */
+    Node.prototype.iterate = function (callback) {
+        var _iterate = function (node, level) {
+            if (node.children) {
+                for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
+                    var child = _a[_i];
+                    var result = callback(child, level);
+                    if (result && child.hasChildren()) {
+                        _iterate(child, level + 1);
+                    }
+                }
+            }
+        };
+        _iterate(this, 0);
+    };
+    /*
+    Move node relative to another node.
 
-  return HitAreasGenerator;
+    Argument position: Position.BEFORE, Position.AFTER or Position.Inside
 
-})(VisibleNodeIterator);
-
-DragElement = (function() {
-  function DragElement(node_name, offset_x, offset_y, $tree) {
-    this.offset_x = offset_x;
-    this.offset_y = offset_y;
-    this.$element = $("<span class=\"jqtree-title jqtree-dragging\">" + 
node_name + "</span>");
-    this.$element.css("position", "absolute");
-    $tree.append(this.$element);
-  }
-
-  DragElement.prototype.move = function(page_x, page_y) {
-    return this.$element.offset({
-      left: page_x - this.offset_x,
-      top: page_y - this.offset_y
-    });
-  };
-
-  DragElement.prototype.remove = function() {
-    return this.$element.remove();
-  };
-
-  return DragElement;
-
-})();
-
-module.exports = {
-  DragAndDropHandler: DragAndDropHandler,
-  DragElement: DragElement,
-  HitAreasGenerator: HitAreasGenerator
-};
-
-},{"./node":5,"./util":12}],2:[function(require,module,exports){
-var $, ElementsRenderer, NodeElement, html_escape, node_element, util;
-
-node_element = require('./node_element');
-
-NodeElement = node_element.NodeElement;
-
-util = require('./util');
-
-html_escape = util.html_escape;
-
-$ = jQuery;
-
-ElementsRenderer = (function() {
-  function ElementsRenderer(tree_widget) {
-    this.tree_widget = tree_widget;
-    this.opened_icon_element = 
this.createButtonElement(tree_widget.options.openedIcon);
-    this.closed_icon_element = 
this.createButtonElement(tree_widget.options.closedIcon);
-  }
-
-  ElementsRenderer.prototype.render = function(from_node) {
-    if (from_node && from_node.parent) {
-      return this.renderFromNode(from_node);
-    } else {
-      return this.renderFromRoot();
-    }
-  };
-
-  ElementsRenderer.prototype.renderFromRoot = function() {
-    var $element;
-    $element = this.tree_widget.element;
-    $element.empty();
-    return this.createDomElements($element[0], this.tree_widget.tree.children, 
true, true, 1);
-  };
-
-  ElementsRenderer.prototype.renderFromNode = function(node) {
-    var $previous_li, li;
-    $previous_li = $(node.element);
-    li = this.createLi(node, node.getLevel());
-    this.attachNodeData(node, li);
-    $previous_li.after(li);
-    $previous_li.remove();
-    if (node.children) {
-      return this.createDomElements(li, node.children, false, false, 
node.getLevel() + 1);
-    }
-  };
-
-  ElementsRenderer.prototype.createDomElements = function(element, children, 
is_root_node, is_open, level) {
-    var child, i, len, li, ul;
-    ul = this.createUl(is_root_node);
-    element.appendChild(ul);
-    for (i = 0, len = children.length; i < len; i++) {
-      child = children[i];
-      li = this.createLi(child, level);
-      ul.appendChild(li);
-      this.attachNodeData(child, li);
-      if (child.hasChildren()) {
-        this.createDomElements(li, child.children, false, child.is_open, level 
+ 1);
-      }
-    }
-    return null;
-  };
-
-  ElementsRenderer.prototype.attachNodeData = function(node, li) {
-    node.element = li;
-    return $(li).data('node', node);
-  };
-
-  ElementsRenderer.prototype.createUl = function(is_root_node) {
-    var class_string, role, ul;
-    if (!is_root_node) {
-      class_string = '';
-      role = 'group';
-    } else {
-      class_string = 'jqtree-tree';
-      role = 'tree';
-      if (this.tree_widget.options.rtl) {
-        class_string += ' jqtree-rtl';
-      }
-    }
-    ul = document.createElement('ul');
-    ul.className = "jqtree_common " + class_string;
-    ul.setAttribute('role', role);
-    return ul;
-  };
-
-  ElementsRenderer.prototype.createLi = function(node, level) {
-    var is_selected, li;
-    is_selected = this.tree_widget.select_node_handler && 
this.tree_widget.select_node_handler.isNodeSelected(node);
-    if (node.isFolder()) {
-      li = this.createFolderLi(node, level, is_selected);
-    } else {
-      li = this.createNodeLi(node, level, is_selected);
-    }
-    if (this.tree_widget.options.onCreateLi) {
-      this.tree_widget.options.onCreateLi(node, $(li));
-    }
-    return li;
-  };
-
-  ElementsRenderer.prototype.createFolderLi = function(node, level, 
is_selected) {
-    var button_classes, button_link, div, folder_classes, icon_element, 
is_folder, li;
-    button_classes = this.getButtonClasses(node);
-    folder_classes = this.getFolderClasses(node, is_selected);
-    if (node.is_open) {
-      icon_element = this.opened_icon_element;
-    } else {
-      icon_element = this.closed_icon_element;
-    }
-    li = document.createElement('li');
-    li.className = "jqtree_common " + folder_classes;
-    li.setAttribute('role', 'presentation');
-    div = document.createElement('div');
-    div.className = "jqtree-element jqtree_common";
-    div.setAttribute('role', 'presentation');
-    li.appendChild(div);
-    button_link = document.createElement('a');
-    button_link.className = button_classes;
-    button_link.appendChild(icon_element.cloneNode(false));
-    button_link.setAttribute('role', 'presentation');
-    button_link.setAttribute('aria-hidden', 'true');
-    if (this.tree_widget.options.buttonLeft) {
-      div.appendChild(button_link);
-    }
-    div.appendChild(this.createTitleSpan(node.name, level, is_selected, 
node.is_open, is_folder = true));
-    if (!this.tree_widget.options.buttonLeft) {
-      div.appendChild(button_link);
-    }
-    return li;
-  };
-
-  ElementsRenderer.prototype.createNodeLi = function(node, level, is_selected) 
{
-    var class_string, div, is_folder, li, li_classes;
-    li_classes = ['jqtree_common'];
-    if (is_selected) {
-      li_classes.push('jqtree-selected');
-    }
-    class_string = li_classes.join(' ');
-    li = document.createElement('li');
-    li.className = class_string;
-    li.setAttribute('role', 'presentation');
-    div = document.createElement('div');
-    div.className = "jqtree-element jqtree_common";
-    div.setAttribute('role', 'presentation');
-    li.appendChild(div);
-    div.appendChild(this.createTitleSpan(node.name, level, is_selected, 
node.is_open, is_folder = false));
-    return li;
-  };
-
-  ElementsRenderer.prototype.createTitleSpan = function(node_name, level, 
is_selected, is_open, is_folder) {
-    var classes, title_span;
-    title_span = document.createElement('span');
-    classes = "jqtree-title jqtree_common";
-    if (is_folder) {
-      classes += " jqtree-title-folder";
-    }
-    title_span.className = classes;
-    title_span.setAttribute('role', 'treeitem');
-    title_span.setAttribute('aria-level', level);
-    title_span.setAttribute('aria-selected', util.getBoolString(is_selected));
-    title_span.setAttribute('aria-expanded', util.getBoolString(is_open));
-    if (is_selected) {
-      title_span.setAttribute('tabindex', 0);
-    }
-    title_span.innerHTML = this.escapeIfNecessary(node_name);
-    return title_span;
-  };
-
-  ElementsRenderer.prototype.getButtonClasses = function(node) {
-    var classes;
-    classes = ['jqtree-toggler', 'jqtree_common'];
-    if (!node.is_open) {
-      classes.push('jqtree-closed');
-    }
-    if (this.tree_widget.options.buttonLeft) {
-      classes.push('jqtree-toggler-left');
-    } else {
-      classes.push('jqtree-toggler-right');
-    }
-    return classes.join(' ');
-  };
-
-  ElementsRenderer.prototype.getFolderClasses = function(node, is_selected) {
-    var classes;
-    classes = ['jqtree-folder'];
-    if (!node.is_open) {
-      classes.push('jqtree-closed');
-    }
-    if (is_selected) {
-      classes.push('jqtree-selected');
-    }
-    if (node.is_loading) {
-      classes.push('jqtree-loading');
-    }
-    return classes.join(' ');
-  };
-
-  ElementsRenderer.prototype.escapeIfNecessary = function(value) {
-    if (this.tree_widget.options.autoEscape) {
-      return html_escape(value);
-    } else {
-      return value;
-    }
-  };
-
-  ElementsRenderer.prototype.createButtonElement = function(value) {
-    var div;
-    if (typeof value === 'string') {
-      div = document.createElement('div');
-      div.innerHTML = value;
-      return document.createTextNode(div.innerHTML);
-    } else {
-      return $(value)[0];
-    }
-  };
-
-  return ElementsRenderer;
-
-})();
-
-module.exports = ElementsRenderer;
-
-},{"./node_element":6,"./util":12}],3:[function(require,module,exports){
-var $, KeyHandler,
-  bind = function(fn, me){ return function(){ return fn.apply(me, arguments); 
}; };
-
-$ = jQuery;
-
-KeyHandler = (function() {
-  var DOWN, LEFT, RIGHT, UP;
-
-  LEFT = 37;
-
-  UP = 38;
-
-  RIGHT = 39;
-
-  DOWN = 40;
-
-  function KeyHandler(tree_widget) {
-    this.selectNode = bind(this.selectNode, this);
-    this.tree_widget = tree_widget;
-    if (tree_widget.options.keyboardSupport) {
-      $(document).bind('keydown.jqtree', $.proxy(this.handleKeyDown, this));
-    }
-  }
-
-  KeyHandler.prototype.deinit = function() {
-    return $(document).unbind('keydown.jqtree');
-  };
-
-  KeyHandler.prototype.moveDown = function() {
-    var node;
-    node = this.tree_widget.getSelectedNode();
-    if (node) {
-      return this.selectNode(node.getNextNode());
-    } else {
-      return false;
-    }
-  };
-
-  KeyHandler.prototype.moveUp = function() {
-    var node;
-    node = this.tree_widget.getSelectedNode();
-    if (node) {
-      return this.selectNode(node.getPreviousNode());
-    } else {
-      return false;
-    }
-  };
-
-  KeyHandler.prototype.moveRight = function() {
-    var node;
-    node = this.tree_widget.getSelectedNode();
-    if (!node) {
-      return true;
-    } else if (!node.isFolder()) {
-      return true;
-    } else {
-      if (node.is_open) {
-        return this.selectNode(node.getNextNode());
-      } else {
-        this.tree_widget.openNode(node);
-        return false;
-      }
-    }
-  };
-
-  KeyHandler.prototype.moveLeft = function() {
-    var node;
-    node = this.tree_widget.getSelectedNode();
-    if (!node) {
-      return true;
-    } else if (node.isFolder() && node.is_open) {
-      this.tree_widget.closeNode(node);
-      return false;
-    } else {
-      return this.selectNode(node.getParent());
-    }
-  };
-
-  KeyHandler.prototype.handleKeyDown = function(e) {
-    var key;
-    if (!this.tree_widget.options.keyboardSupport) {
-      return true;
-    }
-    if ($(document.activeElement).is('textarea,input,select')) {
-      return true;
-    }
-    if (!this.tree_widget.getSelectedNode()) {
-      return true;
-    }
-    key = e.which;
-    switch (key) {
-      case DOWN:
-        return this.moveDown();
-      case UP:
-        return this.moveUp();
-      case RIGHT:
-        return this.moveRight();
-      case LEFT:
-        return this.moveLeft();
-    }
-    return true;
-  };
-
-  KeyHandler.prototype.selectNode = function(node) {
-    if (!node) {
-      return true;
-    } else {
-      this.tree_widget.selectNode(node);
-      if (this.tree_widget.scroll_handler && 
(!this.tree_widget.scroll_handler.isScrolledIntoView($(node.element).find('.jqtree-element'))))
 {
-        this.tree_widget.scrollToNode(node);
-      }
-      return false;
-    }
-  };
-
-  return KeyHandler;
-
-})();
-
-module.exports = KeyHandler;
-
-},{}],4:[function(require,module,exports){
-
-/*
-This widget does the same a the mouse widget in jqueryui.
- */
-var $, MouseWidget, SimpleWidget,
-  extend = function(child, parent) { for (var key in parent) { if 
(hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { 
this.constructor = child; } ctor.prototype = parent.prototype; child.prototype 
= new ctor(); child.__super__ = parent.prototype; return child; },
-  hasProp = {}.hasOwnProperty;
-
-SimpleWidget = require('./simple.widget');
-
-$ = jQuery;
-
-MouseWidget = (function(superClass) {
-  extend(MouseWidget, superClass);
-
-  function MouseWidget() {
-    return MouseWidget.__super__.constructor.apply(this, arguments);
-  }
-
-  MouseWidget.is_mouse_handled = false;
-
-  MouseWidget.prototype._init = function() {
-    this.$el.bind('mousedown.mousewidget', $.proxy(this._mouseDown, this));
-    this.$el.bind('touchstart.mousewidget', $.proxy(this._touchStart, this));
-    this.is_mouse_started = false;
-    this.mouse_delay = 0;
-    this._mouse_delay_timer = null;
-    this._is_mouse_delay_met = true;
-    return this.mouse_down_info = null;
-  };
-
-  MouseWidget.prototype._deinit = function() {
-    var $document;
-    this.$el.unbind('mousedown.mousewidget');
-    this.$el.unbind('touchstart.mousewidget');
-    $document = $(document);
-    $document.unbind('mousemove.mousewidget');
-    return $document.unbind('mouseup.mousewidget');
-  };
-
-  MouseWidget.prototype._mouseDown = function(e) {
-    var result;
-    if (e.which !== 1) {
-      return;
-    }
-    result = this._handleMouseDown(e, this._getPositionInfo(e));
-    if (result) {
-      e.preventDefault();
-    }
-    return result;
-  };
-
-  MouseWidget.prototype._handleMouseDown = function(e, position_info) {
-    if (MouseWidget.is_mouse_handled) {
-      return;
-    }
-    if (this.is_mouse_started) {
-      this._handleMouseUp(position_info);
-    }
-    this.mouse_down_info = position_info;
-    if (!this._mouseCapture(position_info)) {
-      return;
-    }
-    this._handleStartMouse();
-    this.is_mouse_handled = true;
-    return true;
-  };
-
-  MouseWidget.prototype._handleStartMouse = function() {
-    var $document;
-    $document = $(document);
-    $document.bind('mousemove.mousewidget', $.proxy(this._mouseMove, this));
-    $document.bind('touchmove.mousewidget', $.proxy(this._touchMove, this));
-    $document.bind('mouseup.mousewidget', $.proxy(this._mouseUp, this));
-    $document.bind('touchend.mousewidget', $.proxy(this._touchEnd, this));
-    if (this.mouse_delay) {
-      return this._startMouseDelayTimer();
-    }
-  };
-
-  MouseWidget.prototype._startMouseDelayTimer = function() {
-    if (this._mouse_delay_timer) {
-      clearTimeout(this._mouse_delay_timer);
-    }
-    this._mouse_delay_timer = setTimeout((function(_this) {
-      return function() {
-        return _this._is_mouse_delay_met = true;
-      };
-    })(this), this.mouse_delay);
-    return this._is_mouse_delay_met = false;
-  };
-
-  MouseWidget.prototype._mouseMove = function(e) {
-    return this._handleMouseMove(e, this._getPositionInfo(e));
-  };
-
-  MouseWidget.prototype._handleMouseMove = function(e, position_info) {
-    if (this.is_mouse_started) {
-      this._mouseDrag(position_info);
-      return e.preventDefault();
-    }
-    if (this.mouse_delay && !this._is_mouse_delay_met) {
-      return true;
-    }
-    this.is_mouse_started = this._mouseStart(this.mouse_down_info) !== false;
-    if (this.is_mouse_started) {
-      this._mouseDrag(position_info);
-    } else {
-      this._handleMouseUp(position_info);
-    }
-    return !this.is_mouse_started;
-  };
-
-  MouseWidget.prototype._getPositionInfo = function(e) {
-    return {
-      page_x: e.pageX,
-      page_y: e.pageY,
-      target: e.target,
-      original_event: e
+    // move node1 after node2
+    tree.moveNode(node1, node2, Position.AFTER);
+    */
+    Node.prototype.moveNode = function (moved_node, target_node, position) {
+        if (!moved_node.parent || moved_node.isParentOf(target_node)) {
+            // - Node is parent of target node
+            // - Or, parent is empty
+            return;
+        }
+        else {
+            moved_node.parent._removeChild(moved_node);
+            if (position === Position.After) {
+                if (target_node.parent) {
+                    target_node.parent.addChildAtPosition(moved_node, 
target_node.parent.getChildIndex(target_node) + 1);
+                }
+            }
+            else if (position === Position.Before) {
+                if (target_node.parent) {
+                    target_node.parent.addChildAtPosition(moved_node, 
target_node.parent.getChildIndex(target_node));
+                }
+            }
+            else if (position === Position.Inside) {
+                // move inside as first child
+                target_node.addChildAtPosition(moved_node, 0);
+            }
+        }
     };
-  };
-
-  MouseWidget.prototype._mouseUp = function(e) {
-    return this._handleMouseUp(this._getPositionInfo(e));
-  };
-
-  MouseWidget.prototype._handleMouseUp = function(position_info) {
-    var $document;
-    $document = $(document);
-    $document.unbind('mousemove.mousewidget');
-    $document.unbind('touchmove.mousewidget');
-    $document.unbind('mouseup.mousewidget');
-    $document.unbind('touchend.mousewidget');
-    if (this.is_mouse_started) {
-      this.is_mouse_started = false;
-      this._mouseStop(position_info);
-    }
-  };
-
-  MouseWidget.prototype._mouseCapture = function(position_info) {
-    return true;
-  };
-
-  MouseWidget.prototype._mouseStart = function(position_info) {
-    return null;
-  };
-
-  MouseWidget.prototype._mouseDrag = function(position_info) {
-    return null;
-  };
-
-  MouseWidget.prototype._mouseStop = function(position_info) {
-    return null;
-  };
-
-  MouseWidget.prototype.setMouseDelay = function(mouse_delay) {
-    return this.mouse_delay = mouse_delay;
-  };
-
-  MouseWidget.prototype._touchStart = function(e) {
-    var touch;
-    if (e.originalEvent.touches.length > 1) {
-      return;
-    }
-    touch = e.originalEvent.changedTouches[0];
-    return this._handleMouseDown(e, this._getPositionInfo(touch));
-  };
-
-  MouseWidget.prototype._touchMove = function(e) {
-    var touch;
-    if (e.originalEvent.touches.length > 1) {
-      return;
-    }
-    touch = e.originalEvent.changedTouches[0];
-    return this._handleMouseMove(e, this._getPositionInfo(touch));
-  };
-
-  MouseWidget.prototype._touchEnd = function(e) {
-    var touch;
-    if (e.originalEvent.touches.length > 1) {
-      return;
-    }
-    touch = e.originalEvent.changedTouches[0];
-    return this._handleMouseUp(this._getPositionInfo(touch));
-  };
-
-  return MouseWidget;
-
-})(SimpleWidget);
-
-module.exports = MouseWidget;
-
-},{"./simple.widget":10}],5:[function(require,module,exports){
-var $, Node, Position;
-
-$ = jQuery;
-
-Position = {
-  getName: function(position) {
-    return Position.strings[position - 1];
-  },
-  nameToIndex: function(name) {
-    var i, j, ref;
-    for (i = j = 1, ref = Position.strings.length; 1 <= ref ? j <= ref : j >= 
ref; i = 1 <= ref ? ++j : --j) {
-      if (Position.strings[i - 1] === name) {
-        return i;
-      }
-    }
-    return 0;
-  }
-};
-
-Position.BEFORE = 1;
-
-Position.AFTER = 2;
-
-Position.INSIDE = 3;
-
-Position.NONE = 4;
-
-Position.strings = ['before', 'after', 'inside', 'none'];
-
-Node = (function() {
-  function Node(o, is_root, node_class) {
-    if (is_root == null) {
-      is_root = false;
-    }
-    if (node_class == null) {
-      node_class = Node;
-    }
-    this.name = '';
-    this.setData(o);
-    this.children = [];
-    this.parent = null;
-    if (is_root) {
-      this.id_mapping = {};
-      this.tree = this;
-      this.node_class = node_class;
-    }
-  }
-
-  Node.prototype.setData = function(o) {
-
     /*
-    Set the data of this node.
-    
-    setData(string): set the name of the node
-    setdata(object): set attributes of the node
-    
-    Examples:
-        setdata('node1')
-    
-        setData({ name: 'node1', id: 1});
-    
-        setData({ name: 'node2', id: 2, color: 'green'});
-    
-    * This is an internal function; it is not in the docs
-    * Does not remove existing node values
-     */
-    var key, setName, value;
-    setName = (function(_this) {
-      return function(name) {
-        if (name !== null) {
-          return _this.name = name;
+    Get the tree as data.
+    */
+    Node.prototype.getData = function (include_parent) {
+        if (include_parent === void 0) { include_parent = false; }
+        function getDataFromNodes(nodes) {
+            return nodes.map(function (node) {
+                var tmp_node = {};
+                for (var k in node) {
+                    if (["parent", "children", "element", "tree"].indexOf(k) 
=== -1 &&
+                        Object.prototype.hasOwnProperty.call(node, k)) {
+                        var v = node[k];
+                        tmp_node[k] = v;
+                    }
+                }
+                if (node.hasChildren()) {
+                    tmp_node["children"] = getDataFromNodes(node.children);
+                }
+                return tmp_node;
+            });
         }
-      };
-    })(this);
-    if (typeof o !== 'object') {
-      setName(o);
-    } else {
-      for (key in o) {
-        value = o[key];
-        if (key === 'label') {
-          setName(value);
-        } else if (key !== 'children') {
-          this[key] = value;
+        if (include_parent) {
+            return getDataFromNodes([this]);
         }
-      }
-    }
-    return null;
-  };
-
-  Node.prototype.initFromData = function(data) {
-    var addChildren, addNode;
-    addNode = (function(_this) {
-      return function(node_data) {
-        _this.setData(node_data);
-        if (node_data.children) {
-          return addChildren(node_data.children);
+        else {
+            return getDataFromNodes(this.children);
         }
-      };
-    })(this);
-    addChildren = (function(_this) {
-      return function(children_data) {
-        var child, j, len, node;
-        for (j = 0, len = children_data.length; j < len; j++) {
-          child = children_data[j];
-          node = new _this.tree.node_class('');
-          node.initFromData(child);
-          _this.addChild(node);
+    };
+    Node.prototype.getNodeByName = function (name) {
+        return this.getNodeByCallback(function (node) { return node.name === 
name; });
+    };
+    Node.prototype.getNodeByCallback = function (callback) {
+        var result = null;
+        this.iterate(function (node) {
+            if (callback(node)) {
+                result = node;
+                return false;
+            }
+            else {
+                return true;
+            }
+        });
+        return result;
+    };
+    Node.prototype.addAfter = function (node_info) {
+        if (!this.parent) {
+            return null;
         }
-        return null;
-      };
-    })(this);
-    addNode(data);
-    return null;
-  };
-
-
-  /*
-  Create tree from data.
-  
-  Structure of data is:
-  [
-      {
-          label: 'node1',
-          children: [
-              { label: 'child1' },
-              { label: 'child2' }
-          ]
-      },
-      {
-          label: 'node2'
-      }
-  ]
-   */
-
-  Node.prototype.loadFromData = function(data) {
-    var j, len, node, o;
-    this.removeChildren();
-    for (j = 0, len = data.length; j < len; j++) {
-      o = data[j];
-      node = new this.tree.node_class(o);
-      this.addChild(node);
-      if (typeof o === 'object' && o.children) {
-        node.loadFromData(o.children);
-      }
-    }
-    return null;
-  };
-
-
-  /*
-  Add child.
-  
-  tree.addChild(
-      new Node('child1')
-  );
-   */
-
-  Node.prototype.addChild = function(node) {
-    this.children.push(node);
-    return node._setParent(this);
-  };
-
-
-  /*
-  Add child at position. Index starts at 0.
-  
-  tree.addChildAtPosition(
-      new Node('abc'),
-      1
-  );
-   */
-
-  Node.prototype.addChildAtPosition = function(node, index) {
-    this.children.splice(index, 0, node);
-    return node._setParent(this);
-  };
-
-  Node.prototype._setParent = function(parent) {
-    this.parent = parent;
-    this.tree = parent.tree;
-    return this.tree.addNodeToIndex(this);
-  };
-
-
-  /*
-  Remove child. This also removes the children of the node.
-  
-  tree.removeChild(tree.children[0]);
-   */
-
-  Node.prototype.removeChild = function(node) {
-    node.removeChildren();
-    return this._removeChild(node);
-  };
-
-  Node.prototype._removeChild = function(node) {
-    this.children.splice(this.getChildIndex(node), 1);
-    return this.tree.removeNodeFromIndex(node);
-  };
-
-
-  /*
-  Get child index.
-  
-  var index = getChildIndex(node);
-   */
-
-  Node.prototype.getChildIndex = function(node) {
-    return $.inArray(node, this.children);
-  };
-
-
-  /*
-  Does the tree have children?
-  
-  if (tree.hasChildren()) {
-      //
-  }
-   */
-
-  Node.prototype.hasChildren = function() {
-    return this.children.length !== 0;
-  };
-
-  Node.prototype.isFolder = function() {
-    return this.hasChildren() || this.load_on_demand;
-  };
-
-
-  /*
-  Iterate over all the nodes in the tree.
-  
-  Calls callback with (node, level).
-  
-  The callback must return true to continue the iteration on current node.
-  
-  tree.iterate(
-      function(node, level) {
-         console.log(node.name);
-  
-         // stop iteration after level 2
-         return (level <= 2);
-      }
-  );
-   */
-
-  Node.prototype.iterate = function(callback) {
-    var _iterate;
-    _iterate = function(node, level) {
-      var child, j, len, ref, result;
-      if (node.children) {
-        ref = node.children;
-        for (j = 0, len = ref.length; j < len; j++) {
-          child = ref[j];
-          result = callback(child, level);
-          if (result && child.hasChildren()) {
-            _iterate(child, level + 1);
-          }
+        else {
+            var node = new this.tree.node_class(node_info);
+            var child_index = this.parent.getChildIndex(this);
+            this.parent.addChildAtPosition(node, child_index + 1);
+            if (typeof node_info === "object" && node_info["children"] && 
node_info["children"].length) {
+                node.loadFromData(node_info["children"]);
+            }
+            return node;
         }
-        return null;
-      }
     };
-    _iterate(this, 0);
-    return null;
-  };
-
-
-  /*
-  Move node relative to another node.
-  
-  Argument position: Position.BEFORE, Position.AFTER or Position.Inside
-  
-  // move node1 after node2
-  tree.moveNode(node1, node2, Position.AFTER);
-   */
-
-  Node.prototype.moveNode = function(moved_node, target_node, position) {
-    if (moved_node.isParentOf(target_node)) {
-      return;
-    }
-    moved_node.parent._removeChild(moved_node);
-    if (position === Position.AFTER) {
-      return target_node.parent.addChildAtPosition(moved_node, 
target_node.parent.getChildIndex(target_node) + 1);
-    } else if (position === Position.BEFORE) {
-      return target_node.parent.addChildAtPosition(moved_node, 
target_node.parent.getChildIndex(target_node));
-    } else if (position === Position.INSIDE) {
-      return target_node.addChildAtPosition(moved_node, 0);
-    }
-  };
-
-
-  /*
-  Get the tree as data.
-   */
-
-  Node.prototype.getData = function(include_parent) {
-    var getDataFromNodes;
-    if (include_parent == null) {
-      include_parent = false;
-    }
-    getDataFromNodes = function(nodes) {
-      var data, j, k, len, node, tmp_node, v;
-      data = [];
-      for (j = 0, len = nodes.length; j < len; j++) {
-        node = nodes[j];
-        tmp_node = {};
-        for (k in node) {
-          v = node[k];
-          if ((k !== 'parent' && k !== 'children' && k !== 'element' && k !== 
'tree') && Object.prototype.hasOwnProperty.call(node, k)) {
-            tmp_node[k] = v;
-          }
+    Node.prototype.addBefore = function (node_info) {
+        if (!this.parent) {
+            return null;
         }
-        if (node.hasChildren()) {
-          tmp_node.children = getDataFromNodes(node.children);
+        else {
+            var node = new this.tree.node_class(node_info);
+            var child_index = this.parent.getChildIndex(this);
+            this.parent.addChildAtPosition(node, child_index);
+            if (typeof node_info === "object" && node_info["children"] && 
node_info["children"].length) {
+                node.loadFromData(node_info["children"]);
+            }
+            return node;
         }
-        data.push(tmp_node);
-      }
-      return data;
     };
-    if (include_parent) {
-      return getDataFromNodes([this]);
-    } else {
-      return getDataFromNodes(this.children);
-    }
-  };
-
-  Node.prototype.getNodeByName = function(name) {
-    return this.getNodeByCallback(function(node) {
-      return node.name === name;
-    });
-  };
-
-  Node.prototype.getNodeByCallback = function(callback) {
-    var result;
-    result = null;
-    this.iterate(function(node) {
-      if (callback(node)) {
-        result = node;
+    Node.prototype.addParent = function (node_info) {
+        if (!this.parent) {
+            return null;
+        }
+        else {
+            var new_parent = new this.tree.node_class(node_info);
+            new_parent._setParent(this.tree);
+            var original_parent = this.parent;
+            for (var _i = 0, _a = original_parent.children; _i < _a.length; 
_i++) {
+                var child = _a[_i];
+                new_parent.addChild(child);
+            }
+            original_parent.children = [];
+            original_parent.addChild(new_parent);
+            return new_parent;
+        }
+    };
+    Node.prototype.remove = function () {
+        if (this.parent) {
+            this.parent.removeChild(this);
+            this.parent = null;
+        }
+    };
+    Node.prototype.append = function (node_info) {
+        var node = new this.tree.node_class(node_info);
+        this.addChild(node);
+        if (typeof node_info === "object" && node_info["children"] && 
node_info["children"].length) {
+            node.loadFromData(node_info["children"]);
+        }
+        return node;
+    };
+    Node.prototype.prepend = function (node_info) {
+        var node = new this.tree.node_class(node_info);
+        this.addChildAtPosition(node, 0);
+        if (typeof node_info === "object" && node_info["children"] && 
node_info["children"].length) {
+            node.loadFromData(node_info["children"]);
+        }
+        return node;
+    };
+    Node.prototype.isParentOf = function (node) {
+        var parent = node.parent;
+        while (parent) {
+            if (parent === this) {
+                return true;
+            }
+            parent = parent.parent;
+        }
         return false;
-      } else {
-        return true;
-      }
-    });
-    return result;
-  };
+    };
+    Node.prototype.getLevel = function () {
+        var level = 0;
+        var node = this;
+        while (node.parent) {
+            level += 1;
+            node = node.parent;
+        }
+        return level;
+    };
+    Node.prototype.getNodeById = function (node_id) {
+        return this.id_mapping[node_id];
+    };
+    Node.prototype.addNodeToIndex = function (node) {
+        if (node.id != null) {
+            this.id_mapping[node.id] = node;
+        }
+    };
+    Node.prototype.removeNodeFromIndex = function (node) {
+        if (node.id != null) {
+            delete this.id_mapping[node.id];
+        }
+    };
+    Node.prototype.removeChildren = function () {
+        var _this = this;
+        this.iterate(function (child) {
+            _this.tree.removeNodeFromIndex(child);
+            return true;
+        });
+        this.children = [];
+    };
+    Node.prototype.getPreviousSibling = function () {
+        if (!this.parent) {
+            return null;
+        }
+        else {
+            var previous_index = this.parent.getChildIndex(this) - 1;
+            if (previous_index >= 0) {
+                return this.parent.children[previous_index];
+            }
+            else {
+                return null;
+            }
+        }
+    };
+    Node.prototype.getNextSibling = function () {
+        if (!this.parent) {
+            return null;
+        }
+        else {
+            var next_index = this.parent.getChildIndex(this) + 1;
+            if (next_index < this.parent.children.length) {
+                return this.parent.children[next_index];
+            }
+            else {
+                return null;
+            }
+        }
+    };
+    Node.prototype.getNodesByProperty = function (key, value) {
+        return this.filter(function (node) { return node[key] === value; });
+    };
+    Node.prototype.filter = function (f) {
+        var result = [];
+        this.iterate(function (node) {
+            if (f(node)) {
+                result.push(node);
+            }
+            return true;
+        });
+        return result;
+    };
+    Node.prototype.getNextNode = function (include_children) {
+        if (include_children === void 0) { include_children = true; }
+        if (include_children && this.hasChildren() && this.is_open) {
+            // First child
+            return this.children[0];
+        }
+        else {
+            if (!this.parent) {
+                return null;
+            }
+            else {
+                var next_sibling = this.getNextSibling();
+                if (next_sibling) {
+                    // Next sibling
+                    return next_sibling;
+                }
+                else {
+                    // Next node of parent
+                    return this.parent.getNextNode(false);
+                }
+            }
+        }
+    };
+    Node.prototype.getPreviousNode = function () {
+        if (!this.parent) {
+            return null;
+        }
+        else {
+            var previous_sibling = this.getPreviousSibling();
+            if (previous_sibling) {
+                if (!previous_sibling.hasChildren() || 
!previous_sibling.is_open) {
+                    // Previous sibling
+                    return previous_sibling;
+                }
+                else {
+                    // Last child of previous sibling
+                    return previous_sibling.getLastChild();
+                }
+            }
+            else {
+                return this.getParent();
+            }
+        }
+    };
+    Node.prototype.getParent = function () {
+        // Return parent except if it is the root node
+        if (!this.parent) {
+            return null;
+        }
+        else if (!this.parent.parent) {
+            // Root node -> null
+            return null;
+        }
+        else {
+            return this.parent;
+        }
+    };
+    Node.prototype.getLastChild = function () {
+        if (!this.hasChildren()) {
+            return null;
+        }
+        else {
+            var last_child = this.children[this.children.length - 1];
+            if (!last_child.hasChildren() || !last_child.is_open) {
+                return last_child;
+            }
+            else {
+                return last_child.getLastChild();
+            }
+        }
+    };
+    // Init Node from data without making it the root of the tree
+    Node.prototype.initFromData = function (data) {
+        var _this = this;
+        var addNode = function (node_data) {
+            _this.setData(node_data);
+            if (node_data["children"]) {
+                addChildren(node_data["children"]);
+            }
+        };
+        var addChildren = function (children_data) {
+            for (var _i = 0, children_data_1 = children_data; _i < 
children_data_1.length; _i++) {
+                var child = children_data_1[_i];
+                var node = new _this.tree.node_class("");
+                node.initFromData(child);
+                _this.addChild(node);
+            }
+        };
+        addNode(data);
+    };
+    Node.prototype._setParent = function (parent) {
+        this.parent = parent;
+        this.tree = parent.tree;
+        this.tree.addNodeToIndex(this);
+    };
+    Node.prototype._removeChild = function (node) {
+        this.children.splice(this.getChildIndex(node), 1);
+        this.tree.removeNodeFromIndex(node);
+    };
+    return Node;
+}());
+exports.Node = Node;
 
-  Node.prototype.addAfter = function(node_info) {
-    var child_index, node;
-    if (!this.parent) {
-      return null;
-    } else {
-      node = new this.tree.node_class(node_info);
-      child_index = this.parent.getChildIndex(this);
-      this.parent.addChildAtPosition(node, child_index + 1);
-      if (typeof node_info === 'object' && node_info.children && 
node_info.children.length) {
-        node.loadFromData(node_info.children);
-      }
-      return node;
-    }
-  };
 
-  Node.prototype.addBefore = function(node_info) {
-    var child_index, node;
-    if (!this.parent) {
-      return null;
-    } else {
-      node = new this.tree.node_class(node_info);
-      child_index = this.parent.getChildIndex(this);
-      this.parent.addChildAtPosition(node, child_index);
-      if (typeof node_info === 'object' && node_info.children && 
node_info.children.length) {
-        node.loadFromData(node_info.children);
-      }
-      return node;
-    }
-  };
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
 
-  Node.prototype.addParent = function(node_info) {
-    var child, j, len, new_parent, original_parent, ref;
-    if (!this.parent) {
-      return null;
-    } else {
-      new_parent = new this.tree.node_class(node_info);
-      new_parent._setParent(this.tree);
-      original_parent = this.parent;
-      ref = original_parent.children;
-      for (j = 0, len = ref.length; j < len; j++) {
-        child = ref[j];
-        new_parent.addChild(child);
-      }
-      original_parent.children = [];
-      original_parent.addChild(new_parent);
-      return new_parent;
-    }
-  };
+"use strict";
 
-  Node.prototype.remove = function() {
-    if (this.parent) {
-      this.parent.removeChild(this);
-      return this.parent = null;
+exports.__esModule = true;
+function isInt(n) {
+    return typeof n === "number" && n % 1 === 0;
+}
+exports.isInt = isInt;
+function isFunction(v) {
+    return typeof v === "function";
+}
+exports.isFunction = isFunction;
+// Escape a string for HTML interpolation; copied from underscore js
+function html_escape(text) {
+    return ("" + text)
+        .replace(/&/g, "&amp;")
+        .replace(/</g, "&lt;")
+        .replace(/>/g, "&gt;")
+        .replace(/"/g, "&quot;")
+        .replace(/'/g, "&#x27;")
+        .replace(/\//g, "&#x2F;");
+}
+exports.html_escape = html_escape;
+function getBoolString(value) {
+    if (value) {
+        return "true";
     }
-  };
-
-  Node.prototype.append = function(node_info) {
-    var node;
-    node = new this.tree.node_class(node_info);
-    this.addChild(node);
-    if (typeof node_info === 'object' && node_info.children && 
node_info.children.length) {
-      node.loadFromData(node_info.children);
+    else {
+        return "false";
     }
-    return node;
-  };
+}
+exports.getBoolString = getBoolString;
 
-  Node.prototype.prepend = function(node_info) {
-    var node;
-    node = new this.tree.node_class(node_info);
-    this.addChildAtPosition(node, 0);
-    if (typeof node_info === 'object' && node_info.children && 
node_info.children.length) {
-      node.loadFromData(node_info.children);
-    }
-    return node;
-  };
 
-  Node.prototype.isParentOf = function(node) {
-    var parent;
-    parent = node.parent;
-    while (parent) {
-      if (parent === this) {
-        return true;
-      }
-      parent = parent.parent;
-    }
-    return false;
-  };
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
 
-  Node.prototype.getLevel = function() {
-    var level, node;
-    level = 0;
-    node = this;
-    while (node.parent) {
-      level += 1;
-      node = node.parent;
-    }
-    return level;
-  };
+"use strict";
 
-  Node.prototype.getNodeById = function(node_id) {
-    return this.id_mapping[node_id];
-  };
-
-  Node.prototype.addNodeToIndex = function(node) {
-    if (node.id != null) {
-      return this.id_mapping[node.id] = node;
+exports.__esModule = true;
+var SimpleWidget = (function () {
+    function SimpleWidget(el, options) {
+        this.$el = $(el);
+        var defaults = this.constructor.defaults;
+        this.options = $.extend({}, defaults, options);
     }
-  };
-
-  Node.prototype.removeNodeFromIndex = function(node) {
-    if (node.id != null) {
-      return delete this.id_mapping[node.id];
-    }
-  };
-
-  Node.prototype.removeChildren = function() {
-    this.iterate((function(_this) {
-      return function(child) {
-        _this.tree.removeNodeFromIndex(child);
-        return true;
-      };
-    })(this));
-    return this.children = [];
-  };
-
-  Node.prototype.getPreviousSibling = function() {
-    var previous_index;
-    if (!this.parent) {
-      return null;
-    } else {
-      previous_index = this.parent.getChildIndex(this) - 1;
-      if (previous_index >= 0) {
-        return this.parent.children[previous_index];
-      } else {
-        return null;
-      }
-    }
-  };
-
-  Node.prototype.getNextSibling = function() {
-    var next_index;
-    if (!this.parent) {
-      return null;
-    } else {
-      next_index = this.parent.getChildIndex(this) + 1;
-      if (next_index < this.parent.children.length) {
-        return this.parent.children[next_index];
-      } else {
-        return null;
-      }
-    }
-  };
-
-  Node.prototype.getNodesByProperty = function(key, value) {
-    return this.filter(function(node) {
-      return node[key] === value;
-    });
-  };
-
-  Node.prototype.filter = function(f) {
-    var result;
-    result = [];
-    this.iterate(function(node) {
-      if (f(node)) {
-        result.push(node);
-      }
-      return true;
-    });
-    return result;
-  };
-
-  Node.prototype.getNextNode = function(include_children) {
-    var next_sibling;
-    if (include_children == null) {
-      include_children = true;
-    }
-    if (include_children && this.hasChildren() && this.is_open) {
-      return this.children[0];
-    } else {
-      if (!this.parent) {
-        return null;
-      } else {
-        next_sibling = this.getNextSibling();
-        if (next_sibling) {
-          return next_sibling;
-        } else {
-          return this.parent.getNextNode(false);
+    SimpleWidget.register = function (widget_class, widget_name) {
+        var getDataKey = function () { return "simple_widget_" + widget_name; 
};
+        function getWidgetData(el, data_key) {
+            var widget = $.data(el, data_key);
+            if (widget && (widget instanceof SimpleWidget)) {
+                return widget;
+            }
+            else {
+                return null;
+            }
         }
-      }
-    }
-  };
-
-  Node.prototype.getPreviousNode = function() {
-    var previous_sibling;
-    if (!this.parent) {
-      return null;
-    } else {
-      previous_sibling = this.getPreviousSibling();
-      if (previous_sibling) {
-        if (!previous_sibling.hasChildren() || !previous_sibling.is_open) {
-          return previous_sibling;
-        } else {
-          return previous_sibling.getLastChild();
+        function createWidget($el, options) {
+            var data_key = getDataKey();
+            for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {
+                var el = _a[_i];
+                var existing_widget = getWidgetData(el, data_key);
+                if (!existing_widget) {
+                    var widget = new widget_class(el, options);
+                    if (!$.data(el, data_key)) {
+                        $.data(el, data_key, widget);
+                    }
+                    // Call init after setting data, so we can call methods
+                    widget._init();
+                }
+            }
+            return $el;
         }
-      } else {
-        return this.getParent();
-      }
-    }
-  };
+        function destroyWidget($el) {
+            var data_key = getDataKey();
+            for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {
+                var el = _a[_i];
+                var widget = getWidgetData(el, data_key);
+                if (widget) {
+                    widget.destroy();
+                }
+                $.removeData(el, data_key);
+            }
+        }
+        function callFunction($el, function_name, args) {
+            var result = null;
+            for (var _i = 0, _a = $el.get(); _i < _a.length; _i++) {
+                var el = _a[_i];
+                var widget = $.data(el, getDataKey());
+                if (widget && (widget instanceof SimpleWidget)) {
+                    var widget_function = widget[function_name];
+                    if (widget_function && (typeof widget_function === 
"function")) {
+                        result = widget_function.apply(widget, args);
+                    }
+                }
+            }
+            return result;
+        }
+        // tslint:disable-next-line: only-arrow-functions
+        $.fn[widget_name] = function (argument1) {
+            var args = [];
+            for (var _i = 1; _i < arguments.length; _i++) {
+                args[_i - 1] = arguments[_i];
+            }
+            var $el = this;
+            if (argument1 === undefined || typeof argument1 === "object") {
+                var options = argument1;
+                return createWidget($el, options);
+            }
+            else if (typeof argument1 === "string" && argument1[0] !== "_") {
+                var function_name = argument1;
+                if (function_name === "destroy") {
+                    return destroyWidget($el);
+                }
+                else if (function_name === "get_widget_class") {
+                    return widget_class;
+                }
+                else {
+                    return callFunction($el, function_name, args);
+                }
+            }
+        };
+    };
+    SimpleWidget.prototype.destroy = function () {
+        this._deinit();
+    };
+    SimpleWidget.prototype._init = function () {
+        //
+    };
+    SimpleWidget.prototype._deinit = function () {
+        //
+    };
+    return SimpleWidget;
+}());
+SimpleWidget.defaults = {};
+exports["default"] = SimpleWidget;
 
-  Node.prototype.getParent = function() {
-    if (!this.parent) {
-      return null;
-    } else if (!this.parent.parent) {
-      return null;
-    } else {
-      return this.parent;
-    }
-  };
 
-  Node.prototype.getLastChild = function() {
-    var last_child;
-    if (!this.hasChildren()) {
-      return null;
-    } else {
-      last_child = this.children[this.children.length - 1];
-      if (!last_child.hasChildren() || !last_child.is_open) {
-        return last_child;
-      } else {
-        return last_child.getLastChild();
-      }
-    }
-  };
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
 
-  return Node;
+"use strict";
 
+var __extends = (this && this.__extends) || (function () {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = 
b; }) ||
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = 
b[p]; };
+    return function (d, b) {
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = 
b.prototype, new __());
+    };
 })();
-
-module.exports = {
-  Node: Node,
-  Position: Position
-};
-
-},{}],6:[function(require,module,exports){
-var $, BorderDropHint, FolderElement, GhostDropHint, NodeElement, Position, 
node,
-  extend = function(child, parent) { for (var key in parent) { if 
(hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { 
this.constructor = child; } ctor.prototype = parent.prototype; child.prototype 
= new ctor(); child.__super__ = parent.prototype; return child; },
-  hasProp = {}.hasOwnProperty;
-
-node = require('./node');
-
-Position = node.Position;
-
-$ = jQuery;
-
-NodeElement = (function() {
-  function NodeElement(node, tree_widget) {
-    this.init(node, tree_widget);
-  }
-
-  NodeElement.prototype.init = function(node, tree_widget) {
-    this.node = node;
-    this.tree_widget = tree_widget;
-    if (!node.element) {
-      node.element = this.tree_widget.element;
+exports.__esModule = true;
+var version_1 = __webpack_require__(12);
+var drag_and_drop_handler_1 = __webpack_require__(4);
+var elements_renderer_1 = __webpack_require__(5);
+var key_handler_1 = __webpack_require__(6);
+var mouse_widget_1 = __webpack_require__(7);
+var save_state_handler_1 = __webpack_require__(9);
+var scroll_handler_1 = __webpack_require__(10);
+var select_node_handler_1 = __webpack_require__(11);
+var simple_widget_1 = __webpack_require__(2);
+var node_1 = __webpack_require__(0);
+var util_1 = __webpack_require__(1);
+var node_element_1 = __webpack_require__(8);
+var JqTreeWidget = (function (_super) {
+    __extends(JqTreeWidget, _super);
+    function JqTreeWidget() {
+        return _super !== null && _super.apply(this, arguments) || this;
     }
-    return this.$element = $(node.element);
-  };
+    JqTreeWidget.prototype.toggle = function (node, slide_param) {
+        var slide = slide_param == null ? this.options.slide : slide_param;
+        if (node.is_open) {
+            this.closeNode(node, slide);
+        }
+        else {
+            this.openNode(node, slide);
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.getTree = function () {
+        return this.tree;
+    };
+    JqTreeWidget.prototype.selectNode = function (node) {
+        this._selectNode(node, false);
+        return this.element;
+    };
+    JqTreeWidget.prototype.getSelectedNode = function () {
+        if (this.select_node_handler) {
+            return this.select_node_handler.getSelectedNode();
+        }
+        else {
+            return false;
+        }
+    };
+    JqTreeWidget.prototype.toJson = function () {
+        return JSON.stringify(this.tree.getData());
+    };
+    JqTreeWidget.prototype.loadData = function (data, parent_node) {
+        this._loadData(data, parent_node);
+        return this.element;
+    };
+    /*
+    signatures:
+    - loadDataFromUrl(url, parent_node=null, on_finished=null)
+        loadDataFromUrl('/my_data');
+        loadDataFromUrl('/my_data', node1);
+        loadDataFromUrl('/my_data', node1, function() { 
console.log('finished'); });
+        loadDataFromUrl('/my_data', null, function() { 
console.log('finished'); });
 
-  NodeElement.prototype.getUl = function() {
-    return this.$element.children('ul:first');
-  };
-
-  NodeElement.prototype.getSpan = function() {
-    return this.$element.children('.jqtree-element').find('span.jqtree-title');
-  };
-
-  NodeElement.prototype.getLi = function() {
-    return this.$element;
-  };
-
-  NodeElement.prototype.addDropHint = function(position) {
-    if (position === Position.INSIDE) {
-      return new BorderDropHint(this.$element);
-    } else {
-      return new GhostDropHint(this.node, this.$element, position);
-    }
-  };
-
-  NodeElement.prototype.select = function() {
-    var $li, $span;
-    $li = this.getLi();
-    $li.addClass('jqtree-selected');
-    $li.attr('aria-selected', 'true');
-    $span = this.getSpan();
-    return $span.attr('tabindex', 0);
-  };
-
-  NodeElement.prototype.deselect = function() {
-    var $li, $span;
-    $li = this.getLi();
-    $li.removeClass('jqtree-selected');
-    $li.attr('aria-selected', 'false');
-    $span = this.getSpan();
-    return $span.attr('tabindex', -1);
-  };
-
-  return NodeElement;
-
-})();
-
-FolderElement = (function(superClass) {
-  extend(FolderElement, superClass);
-
-  function FolderElement() {
-    return FolderElement.__super__.constructor.apply(this, arguments);
-  }
-
-  FolderElement.prototype.open = function(on_finished, slide) {
-    var $button, doOpen;
-    if (slide == null) {
-      slide = true;
-    }
-    if (!this.node.is_open) {
-      this.node.is_open = true;
-      $button = this.getButton();
-      $button.removeClass('jqtree-closed');
-      $button.html('');
-      
$button.append(this.tree_widget.renderer.opened_icon_element.cloneNode(false));
-      doOpen = (function(_this) {
-        return function() {
-          var $li, $span;
-          $li = _this.getLi();
-          $li.removeClass('jqtree-closed');
-          $span = _this.getSpan();
-          $span.attr('aria-expanded', 'true');
-          if (on_finished) {
-            on_finished(_this.node);
-          }
-          return _this.tree_widget._triggerEvent('tree.open', {
-            node: _this.node
-          });
+    - loadDataFromUrl(parent_node=null, on_finished=null)
+        loadDataFromUrl();
+        loadDataFromUrl(node1);
+        loadDataFromUrl(null, function() { console.log('finished'); });
+        loadDataFromUrl(node1, function() { console.log('finished'); });
+    */
+    JqTreeWidget.prototype.loadDataFromUrl = function (param1, param2, param3) 
{
+        if ($.type(param1) === "string") {
+            // first parameter is url
+            this._loadDataFromUrl(param1, param2, param3);
+        }
+        else {
+            // first parameter is not url
+            this._loadDataFromUrl(null, param1, param2);
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.reload = function (on_finished) {
+        this._loadDataFromUrl(null, null, on_finished);
+        return this.element;
+    };
+    JqTreeWidget.prototype.getNodeById = function (node_id) {
+        return this.tree.getNodeById(node_id);
+    };
+    JqTreeWidget.prototype.getNodeByName = function (name) {
+        return this.tree.getNodeByName(name);
+    };
+    JqTreeWidget.prototype.getNodesByProperty = function (key, value) {
+        return this.tree.getNodesByProperty(key, value);
+    };
+    JqTreeWidget.prototype.getNodeByHtmlElement = function (element) {
+        return this._getNode($(element));
+    };
+    JqTreeWidget.prototype.getNodeByCallback = function (callback) {
+        return this.tree.getNodeByCallback(callback);
+    };
+    JqTreeWidget.prototype.openNode = function (node, param1, param2) {
+        var _this = this;
+        var parseParams = function () {
+            var on_finished;
+            var slide;
+            if (util_1.isFunction(param1)) {
+                on_finished = param1;
+                slide = null;
+            }
+            else {
+                slide = param1;
+                on_finished = param2;
+            }
+            if (slide == null) {
+                slide = _this.options.slide;
+            }
+            return [slide, on_finished];
         };
-      })(this);
-      if (slide) {
-        return this.getUl().slideDown('fast', doOpen);
-      } else {
-        this.getUl().show();
-        return doOpen();
-      }
-    }
-  };
-
-  FolderElement.prototype.close = function(slide) {
-    var $button, doClose;
-    if (slide == null) {
-      slide = true;
-    }
-    if (this.node.is_open) {
-      this.node.is_open = false;
-      $button = this.getButton();
-      $button.addClass('jqtree-closed');
-      $button.html('');
-      
$button.append(this.tree_widget.renderer.closed_icon_element.cloneNode(false));
-      doClose = (function(_this) {
-        return function() {
-          var $li, $span;
-          $li = _this.getLi();
-          $li.addClass('jqtree-closed');
-          $span = _this.getSpan();
-          $span.attr('aria-expanded', 'false');
-          return _this.tree_widget._triggerEvent('tree.close', {
-            node: _this.node
-          });
+        var _a = parseParams(), slide = _a[0], on_finished = _a[1];
+        if (node) {
+            this._openNode(node, slide, on_finished);
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.closeNode = function (node, slide_param) {
+        var slide = slide_param == null ? this.options.slide : slide_param;
+        if (node.isFolder()) {
+            new node_element_1.FolderElement(node, this).close(slide);
+            this._saveState();
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.isDragging = function () {
+        if (this.dnd_handler) {
+            return this.dnd_handler.is_dragging;
+        }
+        else {
+            return false;
+        }
+    };
+    JqTreeWidget.prototype.refreshHitAreas = function () {
+        if (this.dnd_handler) {
+            this.dnd_handler.refresh();
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.addNodeAfter = function (new_node_info, 
existing_node) {
+        var new_node = existing_node.addAfter(new_node_info);
+        if (new_node) {
+            this._refreshElements(existing_node.parent);
+        }
+        return new_node;
+    };
+    JqTreeWidget.prototype.addNodeBefore = function (new_node_info, 
existing_node) {
+        var new_node = existing_node.addBefore(new_node_info);
+        if (new_node) {
+            this._refreshElements(existing_node.parent);
+        }
+        return new_node;
+    };
+    JqTreeWidget.prototype.addParentNode = function (new_node_info, 
existing_node) {
+        var new_node = existing_node.addParent(new_node_info);
+        if (new_node) {
+            this._refreshElements(new_node.parent);
+        }
+        return new_node;
+    };
+    JqTreeWidget.prototype.removeNode = function (node) {
+        if (node.parent && this.select_node_handler) {
+            this.select_node_handler.removeFromSelection(node, true); // 
including children
+            node.remove();
+            this._refreshElements(node.parent);
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.appendNode = function (new_node_info, 
parent_node_param) {
+        var parent_node = parent_node_param || this.tree;
+        var node = parent_node.append(new_node_info);
+        this._refreshElements(parent_node);
+        return node;
+    };
+    JqTreeWidget.prototype.prependNode = function (new_node_info, 
parent_node_param) {
+        var parent_node = !parent_node_param ? this.tree : parent_node_param;
+        var node = parent_node.prepend(new_node_info);
+        this._refreshElements(parent_node);
+        return node;
+    };
+    JqTreeWidget.prototype.updateNode = function (node, data) {
+        var id_is_changed = data.id && data.id !== node.id;
+        if (id_is_changed) {
+            this.tree.removeNodeFromIndex(node);
+        }
+        node.setData(data);
+        if (id_is_changed) {
+            this.tree.addNodeToIndex(node);
+        }
+        if (typeof data === "object" && data.children) {
+            node.removeChildren();
+            if (data.children.length) {
+                node.loadFromData(data.children);
+            }
+        }
+        this.renderer.renderFromNode(node);
+        this._selectCurrentNode();
+        return this.element;
+    };
+    JqTreeWidget.prototype.moveNode = function (node, target_node, position) {
+        var position_index = node_1.getPosition(position);
+        this.tree.moveNode(node, target_node, position_index);
+        this._refreshElements(null);
+        return this.element;
+    };
+    JqTreeWidget.prototype.getStateFromStorage = function () {
+        if (this.save_state_handler) {
+            return this.save_state_handler.getStateFromStorage();
+        }
+    };
+    JqTreeWidget.prototype.addToSelection = function (node) {
+        if (node && this.select_node_handler) {
+            this.select_node_handler.addToSelection(node);
+            this._getNodeElementForNode(node).select();
+            this._saveState();
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.getSelectedNodes = function () {
+        if (!this.select_node_handler) {
+            return [];
+        }
+        else {
+            return this.select_node_handler.getSelectedNodes();
+        }
+    };
+    JqTreeWidget.prototype.isNodeSelected = function (node) {
+        if (!this.select_node_handler) {
+            return false;
+        }
+        else {
+            return this.select_node_handler.isNodeSelected(node);
+        }
+    };
+    JqTreeWidget.prototype.removeFromSelection = function (node) {
+        if (this.select_node_handler) {
+            this.select_node_handler.removeFromSelection(node);
+            this._getNodeElementForNode(node).deselect();
+            this._saveState();
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.scrollToNode = function (node) {
+        if (this.scroll_handler) {
+            var $element = $(node.element);
+            var top_1 = $element.offset().top - this.$el.offset().top;
+            this.scroll_handler.scrollTo(top_1);
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.getState = function () {
+        if (this.save_state_handler) {
+            return this.save_state_handler.getState();
+        }
+    };
+    JqTreeWidget.prototype.setState = function (state) {
+        if (this.save_state_handler) {
+            this.save_state_handler.setInitialState(state);
+            this._refreshElements(null);
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.setOption = function (option, value) {
+        this.options[option] = value;
+        return this.element;
+    };
+    JqTreeWidget.prototype.moveDown = function () {
+        if (this.key_handler) {
+            this.key_handler.moveDown();
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.moveUp = function () {
+        if (this.key_handler) {
+            this.key_handler.moveUp();
+        }
+        return this.element;
+    };
+    JqTreeWidget.prototype.getVersion = function () {
+        return version_1["default"];
+    };
+    JqTreeWidget.prototype.testGenerateHitAreas = function (moving_node) {
+        if (!this.dnd_handler) {
+            return [];
+        }
+        else {
+            this.dnd_handler.current_item = 
this._getNodeElementForNode(moving_node);
+            this.dnd_handler.generateHitAreas();
+            return this.dnd_handler.hit_areas;
+        }
+    };
+    JqTreeWidget.prototype._triggerEvent = function (event_name, values) {
+        var event = $.Event(event_name);
+        $.extend(event, values);
+        this.element.trigger(event);
+        return event;
+    };
+    JqTreeWidget.prototype._openNode = function (node, slide, on_finished) {
+        var _this = this;
+        if (slide === void 0) { slide = true; }
+        var doOpenNode = function (_node, _slide, _on_finished) {
+            var folder_element = new node_element_1.FolderElement(_node, 
_this);
+            folder_element.open(_on_finished, _slide);
         };
-      })(this);
-      if (slide) {
-        return this.getUl().slideUp('fast', doClose);
-      } else {
-        this.getUl().hide();
-        return doClose();
-      }
-    }
-  };
-
-  FolderElement.prototype.getButton = function() {
-    return this.$element.children('.jqtree-element').find('a.jqtree-toggler');
-  };
-
-  FolderElement.prototype.addDropHint = function(position) {
-    if (!this.node.is_open && position === Position.INSIDE) {
-      return new BorderDropHint(this.$element);
-    } else {
-      return new GhostDropHint(this.node, this.$element, position);
-    }
-  };
-
-  return FolderElement;
-
-})(NodeElement);
-
-BorderDropHint = (function() {
-  function BorderDropHint($element) {
-    var $div, width;
-    $div = $element.children('.jqtree-element');
-    width = $element.width() - 4;
-    this.$hint = $('<span class="jqtree-border"></span>');
-    $div.append(this.$hint);
-    this.$hint.css({
-      width: width,
-      height: $div.outerHeight() - 4
-    });
-  }
-
-  BorderDropHint.prototype.remove = function() {
-    return this.$hint.remove();
-  };
-
-  return BorderDropHint;
-
-})();
-
-GhostDropHint = (function() {
-  function GhostDropHint(node, $element, position) {
-    this.$element = $element;
-    this.node = node;
-    this.$ghost = $('<li class="jqtree_common jqtree-ghost"><span 
class="jqtree_common jqtree-circle"></span><span class="jqtree_common 
jqtree-line"></span></li>');
-    if (position === Position.AFTER) {
-      this.moveAfter();
-    } else if (position === Position.BEFORE) {
-      this.moveBefore();
-    } else if (position === Position.INSIDE) {
-      if (node.isFolder() && node.is_open) {
-        this.moveInsideOpenFolder();
-      } else {
-        this.moveInside();
-      }
-    }
-  }
-
-  GhostDropHint.prototype.remove = function() {
-    return this.$ghost.remove();
-  };
-
-  GhostDropHint.prototype.moveAfter = function() {
-    return this.$element.after(this.$ghost);
-  };
-
-  GhostDropHint.prototype.moveBefore = function() {
-    return this.$element.before(this.$ghost);
-  };
-
-  GhostDropHint.prototype.moveInsideOpenFolder = function() {
-    return $(this.node.children[0].element).before(this.$ghost);
-  };
-
-  GhostDropHint.prototype.moveInside = function() {
-    this.$element.after(this.$ghost);
-    return this.$ghost.addClass('jqtree-inside');
-  };
-
-  return GhostDropHint;
-
-})();
-
-module.exports = {
-  BorderDropHint: BorderDropHint,
-  FolderElement: FolderElement,
-  GhostDropHint: GhostDropHint,
-  NodeElement: NodeElement
-};
-
-},{"./node":5}],7:[function(require,module,exports){
-var $, SaveStateHandler, indexOf, isInt, util;
-
-util = require('./util');
-
-indexOf = util.indexOf;
-
-isInt = util.isInt;
-
-$ = jQuery;
-
-SaveStateHandler = (function() {
-  function SaveStateHandler(tree_widget) {
-    this.tree_widget = tree_widget;
-  }
-
-  SaveStateHandler.prototype.saveState = function() {
-    var state;
-    state = JSON.stringify(this.getState());
-    if (this.tree_widget.options.onSetStateFromStorage) {
-      return this.tree_widget.options.onSetStateFromStorage(state);
-    } else if (this.supportsLocalStorage()) {
-      return localStorage.setItem(this.getCookieName(), state);
-    } else if ($.cookie) {
-      $.cookie.raw = true;
-      return $.cookie(this.getCookieName(), state, {
-        path: '/'
-      });
-    }
-  };
-
-  SaveStateHandler.prototype.getStateFromStorage = function() {
-    var json_data;
-    json_data = this._loadFromStorage();
-    if (json_data) {
-      return this._parseState(json_data);
-    } else {
-      return null;
-    }
-  };
-
-  SaveStateHandler.prototype._parseState = function(json_data) {
-    var state;
-    state = $.parseJSON(json_data);
-    if (state && state.selected_node && isInt(state.selected_node)) {
-      state.selected_node = [state.selected_node];
-    }
-    return state;
-  };
-
-  SaveStateHandler.prototype._loadFromStorage = function() {
-    if (this.tree_widget.options.onGetStateFromStorage) {
-      return this.tree_widget.options.onGetStateFromStorage();
-    } else if (this.supportsLocalStorage()) {
-      return localStorage.getItem(this.getCookieName());
-    } else if ($.cookie) {
-      $.cookie.raw = true;
-      return $.cookie(this.getCookieName());
-    } else {
-      return null;
-    }
-  };
-
-  SaveStateHandler.prototype.getState = function() {
-    var getOpenNodeIds, getSelectedNodeIds;
-    getOpenNodeIds = (function(_this) {
-      return function() {
-        var open_nodes;
-        open_nodes = [];
-        _this.tree_widget.tree.iterate(function(node) {
-          if (node.is_open && node.id && node.hasChildren()) {
-            open_nodes.push(node.id);
-          }
-          return true;
-        });
-        return open_nodes;
-      };
-    })(this);
-    getSelectedNodeIds = (function(_this) {
-      return function() {
-        var n;
-        return (function() {
-          var i, len, ref, results;
-          ref = this.tree_widget.getSelectedNodes();
-          results = [];
-          for (i = 0, len = ref.length; i < len; i++) {
-            n = ref[i];
-            results.push(n.id);
-          }
-          return results;
-        }).call(_this);
-      };
-    })(this);
-    return {
-      open_nodes: getOpenNodeIds(),
-      selected_node: getSelectedNodeIds()
+        if (node.isFolder()) {
+            if (node.load_on_demand) {
+                this._loadFolderOnDemand(node, slide, on_finished);
+            }
+            else {
+                var parent_1 = node.parent;
+                while (parent_1) {
+                    // nb: do not open root element
+                    if (parent_1.parent) {
+                        doOpenNode(parent_1, false, null);
+                    }
+                    parent_1 = parent_1.parent;
+                }
+                doOpenNode(node, slide, on_finished);
+                this._saveState();
+            }
+        }
     };
-  };
-
-  SaveStateHandler.prototype.setInitialState = function(state) {
-    var must_load_on_demand;
-    if (!state) {
-      return false;
-    } else {
-      must_load_on_demand = this._openInitialNodes(state.open_nodes);
-      this._selectInitialNodes(state.selected_node);
-      return must_load_on_demand;
-    }
-  };
-
-  SaveStateHandler.prototype._openInitialNodes = function(node_ids) {
-    var i, len, must_load_on_demand, node, node_id;
-    must_load_on_demand = false;
-    for (i = 0, len = node_ids.length; i < len; i++) {
-      node_id = node_ids[i];
-      node = this.tree_widget.getNodeById(node_id);
-      if (node) {
-        if (!node.load_on_demand) {
-          node.is_open = true;
-        } else {
-          must_load_on_demand = true;
+    /*
+    Redraw the tree or part of the tree.
+     from_node: redraw this subtree
+    */
+    JqTreeWidget.prototype._refreshElements = function (from_node) {
+        this.renderer.render(from_node);
+        this._triggerEvent("tree.refresh");
+    };
+    JqTreeWidget.prototype._getNodeElementForNode = function (node) {
+        if (node.isFolder()) {
+            return new node_element_1.FolderElement(node, this);
         }
-      }
-    }
-    return must_load_on_demand;
-  };
-
-  SaveStateHandler.prototype._selectInitialNodes = function(node_ids) {
-    var i, len, node, node_id, select_count;
-    select_count = 0;
-    for (i = 0, len = node_ids.length; i < len; i++) {
-      node_id = node_ids[i];
-      node = this.tree_widget.getNodeById(node_id);
-      if (node) {
-        select_count += 1;
-        this.tree_widget.select_node_handler.addToSelection(node);
-      }
-    }
-    return select_count !== 0;
-  };
-
-  SaveStateHandler.prototype.setInitialStateOnDemand = function(state, 
cb_finished) {
-    if (state) {
-      return this._setInitialStateOnDemand(state.open_nodes, 
state.selected_node, cb_finished);
-    } else {
-      return cb_finished();
-    }
-  };
-
-  SaveStateHandler.prototype._setInitialStateOnDemand = function(node_ids, 
selected_nodes, cb_finished) {
-    var loadAndOpenNode, loading_count, openNodes;
-    loading_count = 0;
-    openNodes = (function(_this) {
-      return function() {
-        var i, len, new_nodes_ids, node, node_id;
-        new_nodes_ids = [];
-        for (i = 0, len = node_ids.length; i < len; i++) {
-          node_id = node_ids[i];
-          node = _this.tree_widget.getNodeById(node_id);
-          if (!node) {
-            new_nodes_ids.push(node_id);
-          } else {
-            if (!node.is_loading) {
-              if (node.load_on_demand) {
-                loadAndOpenNode(node);
-              } else {
-                _this.tree_widget._openNode(node, false);
-              }
+        else {
+            return new node_element_1.NodeElement(node, this);
+        }
+    };
+    JqTreeWidget.prototype._getNodeElement = function ($element) {
+        var node = this._getNode($element);
+        if (node) {
+            return this._getNodeElementForNode(node);
+        }
+        else {
+            return null;
+        }
+    };
+    JqTreeWidget.prototype._containsElement = function (element) {
+        var node = this._getNode($(element));
+        return node != null && node.tree === this.tree;
+    };
+    JqTreeWidget.prototype._init = function () {
+        _super.prototype._init.call(this);
+        this.element = this.$el;
+        this.mouse_delay = 300;
+        this.is_initialized = false;
+        this.options.rtl = this._getRtlOption();
+        if (!this.options.closedIcon) {
+            this.options.closedIcon = this._getDefaultClosedIcon();
+        }
+        this.renderer = new elements_renderer_1["default"](this);
+        if (save_state_handler_1["default"] != null) {
+            this.save_state_handler = new 
save_state_handler_1["default"](this);
+        }
+        else {
+            this.options.saveState = false;
+        }
+        if (select_node_handler_1["default"] != null) {
+            this.select_node_handler = new 
select_node_handler_1["default"](this);
+        }
+        if (drag_and_drop_handler_1.DragAndDropHandler != null) {
+            this.dnd_handler = new 
drag_and_drop_handler_1.DragAndDropHandler(this);
+        }
+        else {
+            this.options.dragAndDrop = false;
+        }
+        if (scroll_handler_1["default"] != null) {
+            this.scroll_handler = new scroll_handler_1["default"](this);
+        }
+        if (key_handler_1["default"] != null && 
select_node_handler_1["default"] != null) {
+            this.key_handler = new key_handler_1["default"](this);
+        }
+        this._initData();
+        this.element.click($.proxy(this._click, this));
+        this.element.dblclick($.proxy(this._dblclick, this));
+        if (this.options.useContextMenu) {
+            this.element.on("contextmenu", $.proxy(this._contextmenu, this));
+        }
+    };
+    JqTreeWidget.prototype._deinit = function () {
+        this.element.empty();
+        this.element.off();
+        if (this.key_handler) {
+            this.key_handler.deinit();
+        }
+        this.tree = new node_1.Node({}, true);
+        _super.prototype._deinit.call(this);
+    };
+    JqTreeWidget.prototype._mouseCapture = function (position_info) {
+        if (this.options.dragAndDrop && this.dnd_handler) {
+            return this.dnd_handler.mouseCapture(position_info);
+        }
+        else {
+            return false;
+        }
+    };
+    JqTreeWidget.prototype._mouseStart = function (position_info) {
+        if (this.options.dragAndDrop && this.dnd_handler) {
+            return this.dnd_handler.mouseStart(position_info);
+        }
+        else {
+            return false;
+        }
+    };
+    JqTreeWidget.prototype._mouseDrag = function (position_info) {
+        if (this.options.dragAndDrop && this.dnd_handler) {
+            var result = this.dnd_handler.mouseDrag(position_info);
+            if (this.scroll_handler) {
+                this.scroll_handler.checkScrolling();
             }
-          }
+            return result;
         }
-        node_ids = new_nodes_ids;
-        if (_this._selectInitialNodes(selected_nodes)) {
-          _this.tree_widget._refreshElements();
+        else {
+            return false;
         }
-        if (loading_count === 0) {
-          return cb_finished();
+    };
+    JqTreeWidget.prototype._mouseStop = function (position_info) {
+        if (this.options.dragAndDrop && this.dnd_handler) {
+            return this.dnd_handler.mouseStop(position_info);
         }
-      };
-    })(this);
-    loadAndOpenNode = (function(_this) {
-      return function(node) {
-        loading_count += 1;
-        return _this.tree_widget._openNode(node, false, function() {
-          loading_count -= 1;
-          return openNodes();
-        });
-      };
-    })(this);
-    return openNodes();
-  };
-
-  SaveStateHandler.prototype.getCookieName = function() {
-    if (typeof this.tree_widget.options.saveState === 'string') {
-      return this.tree_widget.options.saveState;
-    } else {
-      return 'tree';
-    }
-  };
-
-  SaveStateHandler.prototype.supportsLocalStorage = function() {
-    var testSupport;
-    testSupport = function() {
-      var error, key;
-      if (typeof localStorage === "undefined" || localStorage === null) {
-        return false;
-      } else {
-        try {
-          key = '_storage_test';
-          sessionStorage.setItem(key, true);
-          sessionStorage.removeItem(key);
-        } catch (error1) {
-          error = error1;
-          return false;
+        else {
+            return false;
         }
-        return true;
-      }
     };
-    if (this._supportsLocalStorage == null) {
-      this._supportsLocalStorage = testSupport();
-    }
-    return this._supportsLocalStorage;
-  };
-
-  SaveStateHandler.prototype.getNodeIdToBeSelected = function() {
-    var state;
-    state = this.getStateFromStorage();
-    if (state && state.selected_node) {
-      return state.selected_node[0];
-    } else {
-      return null;
-    }
-  };
-
-  return SaveStateHandler;
-
-})();
-
-module.exports = SaveStateHandler;
-
-},{"./util":12}],8:[function(require,module,exports){
-var $, ScrollHandler;
-
-$ = jQuery;
-
-ScrollHandler = (function() {
-  function ScrollHandler(tree_widget) {
-    this.tree_widget = tree_widget;
-    this.previous_top = -1;
-    this.is_initialized = false;
-  }
-
-  ScrollHandler.prototype._initScrollParent = function() {
-    var $scroll_parent, getParentWithOverflow, setDocumentAsScrollParent;
-    getParentWithOverflow = (function(_this) {
-      return function() {
-        var css_values, el, hasOverFlow, i, len, ref;
-        css_values = ['overflow', 'overflow-y'];
-        hasOverFlow = function(el) {
-          var css_value, i, len, ref;
-          for (i = 0, len = css_values.length; i < len; i++) {
-            css_value = css_values[i];
-            if ((ref = $.css(el, css_value)) === 'auto' || ref === 'scroll') {
-              return true;
+    JqTreeWidget.prototype._initData = function () {
+        if (this.options.data) {
+            this._loadData(this.options.data, null);
+        }
+        else {
+            var data_url = this._getDataUrlInfo(null);
+            if (data_url) {
+                this._loadDataFromUrl(null, null, null);
             }
-          }
-          return false;
+            else {
+                this._loadData([], null);
+            }
+        }
+    };
+    JqTreeWidget.prototype._getDataUrlInfo = function (node) {
+        var _this = this;
+        var data_url = this.options.dataUrl || this.element.data("url");
+        var getUrlFromString = function () {
+            var url_info = { url: data_url };
+            if (node && node.id) {
+                // Load on demand of a subtree; add node parameter
+                var data = { node: node.id };
+                // tslint:disable-next-line: no-string-literal
+                url_info["data"] = data;
+            }
+            else {
+                // Add selected_node parameter
+                var selected_node_id = _this._getNodeIdToBeSelected();
+                if (selected_node_id) {
+                    var data = { selected_node: selected_node_id };
+                    // tslint:disable-next-line: no-string-literal
+                    url_info["data"] = data;
+                }
+            }
+            return url_info;
         };
-        if (hasOverFlow(_this.tree_widget.$el[0])) {
-          return _this.tree_widget.$el;
+        if ($.isFunction(data_url)) {
+            return data_url(node);
         }
-        ref = _this.tree_widget.$el.parents();
-        for (i = 0, len = ref.length; i < len; i++) {
-          el = ref[i];
-          if (hasOverFlow(el)) {
-            return $(el);
-          }
+        else if ($.type(data_url) === "string") {
+            return getUrlFromString();
         }
+        else {
+            return data_url;
+        }
+    };
+    JqTreeWidget.prototype._getNodeIdToBeSelected = function () {
+        if (this.options.saveState && this.save_state_handler) {
+            return this.save_state_handler.getNodeIdToBeSelected();
+        }
+        else {
+            return null;
+        }
+    };
+    JqTreeWidget.prototype._initTree = function (data) {
+        var _this = this;
+        var doInit = function () {
+            if (!_this.is_initialized) {
+                _this.is_initialized = true;
+                _this._triggerEvent("tree.init");
+            }
+        };
+        this.tree = new this.options.nodeClass(null, true, 
this.options.nodeClass);
+        if (this.select_node_handler) {
+            this.select_node_handler.clear();
+        }
+        this.tree.loadFromData(data);
+        var must_load_on_demand = this._setInitialState();
+        this._refreshElements(null);
+        if (!must_load_on_demand) {
+            doInit();
+        }
+        else {
+            // Load data on demand and then init the tree
+            this._setInitialStateOnDemand(doInit);
+        }
+    };
+    // Set initial state, either by restoring the state or auto-opening nodes
+    // result: must load nodes on demand?
+    JqTreeWidget.prototype._setInitialState = function () {
+        var _this = this;
+        var restoreState = function () {
+            // result: is state restored, must load on demand?
+            if (!(_this.options.saveState && _this.save_state_handler)) {
+                return [false, false];
+            }
+            else {
+                var state = _this.save_state_handler.getStateFromStorage();
+                if (!state) {
+                    return [false, false];
+                }
+                else {
+                    var must_load_on_demand_1 = 
_this.save_state_handler.setInitialState(state);
+                    // return true: the state is restored
+                    return [true, must_load_on_demand_1];
+                }
+            }
+        };
+        var autoOpenNodes = function () {
+            // result: must load on demand?
+            if (_this.options.autoOpen === false) {
+                return false;
+            }
+            var max_level = _this._getAutoOpenMaxLevel();
+            var must_load_on_demand = false;
+            _this.tree.iterate(function (node, level) {
+                if (node.load_on_demand) {
+                    must_load_on_demand = true;
+                    return false;
+                }
+                else if (!node.hasChildren()) {
+                    return false;
+                }
+                else {
+                    node.is_open = true;
+                    return (level !== max_level);
+                }
+            });
+            return must_load_on_demand;
+        };
+        // tslint:disable-next-line: prefer-const
+        var _a = restoreState(), is_restored = _a[0], must_load_on_demand = 
_a[1];
+        if (!is_restored) {
+            must_load_on_demand = autoOpenNodes();
+        }
+        return must_load_on_demand;
+    };
+    // Set the initial state for nodes that are loaded on demand
+    // Call cb_finished when done
+    JqTreeWidget.prototype._setInitialStateOnDemand = function (cb_finished) {
+        var _this = this;
+        var restoreState = function () {
+            if (!(_this.options.saveState && _this.save_state_handler)) {
+                return false;
+            }
+            else {
+                var state = _this.save_state_handler.getStateFromStorage();
+                if (!state) {
+                    return false;
+                }
+                else {
+                    _this.save_state_handler.setInitialStateOnDemand(state, 
cb_finished);
+                    return true;
+                }
+            }
+        };
+        var autoOpenNodes = function () {
+            var max_level = _this._getAutoOpenMaxLevel();
+            var loading_count = 0;
+            var loadAndOpenNode = function (node) {
+                loading_count += 1;
+                _this._openNode(node, false, function () {
+                    loading_count -= 1;
+                    openNodes();
+                });
+            };
+            var openNodes = function () {
+                _this.tree.iterate(function (node, level) {
+                    if (node.load_on_demand) {
+                        if (!node.is_loading) {
+                            loadAndOpenNode(node);
+                        }
+                        return false;
+                    }
+                    else {
+                        _this._openNode(node, false, null);
+                        return (level !== max_level);
+                    }
+                });
+                if (loading_count === 0) {
+                    cb_finished();
+                }
+            };
+            openNodes();
+        };
+        if (!restoreState()) {
+            autoOpenNodes();
+        }
+    };
+    JqTreeWidget.prototype._getAutoOpenMaxLevel = function () {
+        if (this.options.autoOpen === true) {
+            return -1;
+        }
+        else {
+            return parseInt(this.options.autoOpen, 10);
+        }
+    };
+    JqTreeWidget.prototype._click = function (e) {
+        var click_target = this._getClickTarget(e.target);
+        if (click_target) {
+            if (click_target.type === "button") {
+                this.toggle(click_target.node, this.options.slide);
+                e.preventDefault();
+                e.stopPropagation();
+            }
+            else if (click_target.type === "label") {
+                var node = click_target.node;
+                var event_1 = this._triggerEvent("tree.click", {
+                    node: node,
+                    click_event: e
+                });
+                if (!event_1.isDefaultPrevented()) {
+                    this._selectNode(node, true);
+                }
+            }
+        }
+    };
+    JqTreeWidget.prototype._dblclick = function (e) {
+        var click_target = this._getClickTarget(e.target);
+        if (click_target && click_target.type === "label") {
+            this._triggerEvent("tree.dblclick", {
+                node: click_target.node,
+                click_event: e
+            });
+        }
+    };
+    JqTreeWidget.prototype._getClickTarget = function (element) {
+        var $target = $(element);
+        var $button = $target.closest(".jqtree-toggler");
+        if ($button.length) {
+            var node = this._getNode($button);
+            if (node) {
+                return {
+                    type: "button",
+                    node: node
+                };
+            }
+        }
+        else {
+            var $el = $target.closest(".jqtree-element");
+            if ($el.length) {
+                var node = this._getNode($el);
+                if (node) {
+                    return {
+                        type: "label",
+                        node: node
+                    };
+                }
+            }
+        }
         return null;
-      };
-    })(this);
-    setDocumentAsScrollParent = (function(_this) {
-      return function() {
-        _this.scroll_parent_top = 0;
-        return _this.$scroll_parent = null;
-      };
-    })(this);
-    if (this.tree_widget.$el.css('position') === 'fixed') {
-      setDocumentAsScrollParent();
-    }
-    $scroll_parent = getParentWithOverflow();
-    if ($scroll_parent && $scroll_parent.length && $scroll_parent[0].tagName 
!== 'HTML') {
-      this.$scroll_parent = $scroll_parent;
-      this.scroll_parent_top = this.$scroll_parent.offset().top;
-    } else {
-      setDocumentAsScrollParent();
-    }
-    return this.is_initialized = true;
-  };
-
-  ScrollHandler.prototype._ensureInit = function() {
-    if (!this.is_initialized) {
-      return this._initScrollParent();
-    }
-  };
-
-  ScrollHandler.prototype.checkScrolling = function() {
-    var hovered_area;
-    this._ensureInit();
-    hovered_area = this.tree_widget.dnd_handler.hovered_area;
-    if (hovered_area && hovered_area.top !== this.previous_top) {
-      this.previous_top = hovered_area.top;
-      if (this.$scroll_parent) {
-        return this._handleScrollingWithScrollParent(hovered_area);
-      } else {
-        return this._handleScrollingWithDocument(hovered_area);
-      }
-    }
-  };
-
-  ScrollHandler.prototype._handleScrollingWithScrollParent = function(area) {
-    var distance_bottom;
-    distance_bottom = this.scroll_parent_top + 
this.$scroll_parent[0].offsetHeight - area.bottom;
-    if (distance_bottom < 20) {
-      this.$scroll_parent[0].scrollTop += 20;
-      this.tree_widget.refreshHitAreas();
-      return this.previous_top = -1;
-    } else if ((area.top - this.scroll_parent_top) < 20) {
-      this.$scroll_parent[0].scrollTop -= 20;
-      this.tree_widget.refreshHitAreas();
-      return this.previous_top = -1;
-    }
-  };
-
-  ScrollHandler.prototype._handleScrollingWithDocument = function(area) {
-    var distance_top;
-    distance_top = area.top - $(document).scrollTop();
-    if (distance_top < 20) {
-      return $(document).scrollTop($(document).scrollTop() - 20);
-    } else if ($(window).height() - (area.bottom - $(document).scrollTop()) < 
20) {
-      return $(document).scrollTop($(document).scrollTop() + 20);
-    }
-  };
-
-  ScrollHandler.prototype.scrollTo = function(top) {
-    var tree_top;
-    this._ensureInit();
-    if (this.$scroll_parent) {
-      return this.$scroll_parent[0].scrollTop = top;
-    } else {
-      tree_top = this.tree_widget.$el.offset().top;
-      return $(document).scrollTop(top + tree_top);
-    }
-  };
-
-  ScrollHandler.prototype.isScrolledIntoView = function(element) {
-    var $element, element_bottom, element_top, view_bottom, view_top;
-    this._ensureInit();
-    $element = $(element);
-    if (this.$scroll_parent) {
-      view_top = 0;
-      view_bottom = this.$scroll_parent.height();
-      element_top = $element.offset().top - this.scroll_parent_top;
-      element_bottom = element_top + $element.height();
-    } else {
-      view_top = $(window).scrollTop();
-      view_bottom = view_top + $(window).height();
-      element_top = $element.offset().top;
-      element_bottom = element_top + $element.height();
-    }
-    return (element_bottom <= view_bottom) && (element_top >= view_top);
-  };
-
-  return ScrollHandler;
-
-})();
-
-module.exports = ScrollHandler;
-
-},{}],9:[function(require,module,exports){
-var $, SelectNodeHandler;
-
-$ = jQuery;
-
-SelectNodeHandler = (function() {
-  function SelectNodeHandler(tree_widget) {
-    this.tree_widget = tree_widget;
-    this.clear();
-  }
-
-  SelectNodeHandler.prototype.getSelectedNode = function() {
-    var selected_nodes;
-    selected_nodes = this.getSelectedNodes();
-    if (selected_nodes.length) {
-      return selected_nodes[0];
-    } else {
-      return false;
-    }
-  };
-
-  SelectNodeHandler.prototype.getSelectedNodes = function() {
-    var id, node, selected_nodes;
-    if (this.selected_single_node) {
-      return [this.selected_single_node];
-    } else {
-      selected_nodes = [];
-      for (id in this.selected_nodes) {
-        node = this.tree_widget.getNodeById(id);
-        if (node) {
-          selected_nodes.push(node);
+    };
+    JqTreeWidget.prototype._getNode = function ($element) {
+        var $li = $element.closest("li.jqtree_common");
+        if ($li.length === 0) {
+            return null;
         }
-      }
-      return selected_nodes;
-    }
-  };
-
-  SelectNodeHandler.prototype.getSelectedNodesUnder = function(parent) {
-    var id, node, selected_nodes;
-    if (this.selected_single_node) {
-      if (parent.isParentOf(this.selected_single_node)) {
-        return [this.selected_single_node];
-      } else {
-        return [];
-      }
-    } else {
-      selected_nodes = [];
-      for (id in this.selected_nodes) {
-        node = this.tree_widget.getNodeById(id);
-        if (node && parent.isParentOf(node)) {
-          selected_nodes.push(node);
+        else {
+            return $li.data("node");
         }
-      }
-      return selected_nodes;
-    }
-  };
-
-  SelectNodeHandler.prototype.isNodeSelected = function(node) {
-    if (!node) {
-      return false;
-    } else if (node.id) {
-      if (this.selected_nodes[node.id]) {
-        return true;
-      } else {
-        return false;
-      }
-    } else if (this.selected_single_node) {
-      return this.selected_single_node.element === node.element;
-    } else {
-      return false;
-    }
-  };
-
-  SelectNodeHandler.prototype.clear = function() {
-    this.selected_nodes = {};
-    return this.selected_single_node = null;
-  };
-
-  SelectNodeHandler.prototype.removeFromSelection = function(node, 
include_children) {
-    if (include_children == null) {
-      include_children = false;
-    }
-    if (!node.id) {
-      if (this.selected_single_node && node.element === 
this.selected_single_node.element) {
-        return this.selected_single_node = null;
-      }
-    } else {
-      delete this.selected_nodes[node.id];
-      if (include_children) {
-        return node.iterate((function(_this) {
-          return function(n) {
-            delete _this.selected_nodes[node.id];
-            return true;
-          };
-        })(this));
-      }
-    }
-  };
-
-  SelectNodeHandler.prototype.addToSelection = function(node) {
-    if (node.id) {
-      return this.selected_nodes[node.id] = true;
-    } else {
-      return this.selected_single_node = node;
-    }
-  };
-
-  return SelectNodeHandler;
-
-})();
-
-module.exports = SelectNodeHandler;
-
-},{}],10:[function(require,module,exports){
-
-/*
-Copyright 2013 Marco Braak
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
- */
-var $, SimpleWidget,
-  slice = [].slice;
-
-$ = jQuery;
-
-SimpleWidget = (function() {
-  SimpleWidget.prototype.defaults = {};
-
-  function SimpleWidget(el, options) {
-    this.$el = $(el);
-    this.options = $.extend({}, this.defaults, options);
-  }
-
-  SimpleWidget.prototype.destroy = function() {
-    return this._deinit();
-  };
-
-  SimpleWidget.prototype._init = function() {
-    return null;
-  };
-
-  SimpleWidget.prototype._deinit = function() {
-    return null;
-  };
-
-  SimpleWidget.register = function(widget_class, widget_name) {
-    var callFunction, createWidget, destroyWidget, getDataKey, getWidgetData;
-    getDataKey = function() {
-      return "simple_widget_" + widget_name;
     };
-    getWidgetData = function(el, data_key) {
-      var widget;
-      widget = $.data(el, data_key);
-      if (widget && (widget instanceof SimpleWidget)) {
-        return widget;
-      } else {
+    JqTreeWidget.prototype._contextmenu = function (e) {
+        var $div = $(e.target).closest("ul.jqtree-tree .jqtree-element");
+        if ($div.length) {
+            var node = this._getNode($div);
+            if (node) {
+                e.preventDefault();
+                e.stopPropagation();
+                this._triggerEvent("tree.contextmenu", {
+                    node: node,
+                    click_event: e
+                });
+                return false;
+            }
+        }
         return null;
-      }
     };
-    createWidget = function($el, options) {
-      var data_key, el, existing_widget, i, len, widget;
-      data_key = getDataKey();
-      for (i = 0, len = $el.length; i < len; i++) {
-        el = $el[i];
-        existing_widget = getWidgetData(el, data_key);
-        if (!existing_widget) {
-          widget = new widget_class(el, options);
-          if (!$.data(el, data_key)) {
-            $.data(el, data_key, widget);
-          }
-          widget._init();
+    JqTreeWidget.prototype._saveState = function () {
+        if (this.options.saveState && this.save_state_handler) {
+            this.save_state_handler.saveState();
         }
-      }
-      return $el;
     };
-    destroyWidget = function($el) {
-      var data_key, el, i, len, results, widget;
-      data_key = getDataKey();
-      results = [];
-      for (i = 0, len = $el.length; i < len; i++) {
-        el = $el[i];
-        widget = getWidgetData(el, data_key);
-        if (widget) {
-          widget.destroy();
+    JqTreeWidget.prototype._selectCurrentNode = function () {
+        var node = this.getSelectedNode();
+        if (node) {
+            var node_element = this._getNodeElementForNode(node);
+            if (node_element) {
+                node_element.select();
+            }
         }
-        results.push($.removeData(el, data_key));
-      }
-      return results;
     };
-    callFunction = function($el, function_name, args) {
-      var el, i, len, result, widget, widget_function;
-      result = null;
-      for (i = 0, len = $el.length; i < len; i++) {
-        el = $el[i];
-        widget = $.data(el, getDataKey());
-        if (widget && (widget instanceof SimpleWidget)) {
-          widget_function = widget[function_name];
-          if (widget_function && (typeof widget_function === 'function')) {
-            result = widget_function.apply(widget, args);
-          }
+    JqTreeWidget.prototype._deselectCurrentNode = function () {
+        var node = this.getSelectedNode();
+        if (node) {
+            this.removeFromSelection(node);
         }
-      }
-      return result;
     };
-    return $.fn[widget_name] = function() {
-      var $el, args, argument1, function_name, options;
-      argument1 = arguments[0], args = 2 <= arguments.length ? 
slice.call(arguments, 1) : [];
-      $el = this;
-      if (argument1 === void 0 || typeof argument1 === 'object') {
-        options = argument1;
-        return createWidget($el, options);
-      } else if (typeof argument1 === 'string' && argument1[0] !== '_') {
-        function_name = argument1;
-        if (function_name === 'destroy') {
-          return destroyWidget($el);
-        } else if (function_name === 'get_widget_class') {
-          return widget_class;
-        } else {
-          return callFunction($el, function_name, args);
+    JqTreeWidget.prototype._getDefaultClosedIcon = function () {
+        if (this.options.rtl) {
+            // triangle to the left
+            return "&#x25c0;";
         }
-      }
+        else {
+            // triangle to the right
+            return "&#x25ba;";
+        }
     };
-  };
-
-  return SimpleWidget;
-
-})();
-
-module.exports = SimpleWidget;
-
-},{}],11:[function(require,module,exports){
-var $, BorderDropHint, DragAndDropHandler, DragElement, ElementsRenderer, 
FolderElement, GhostDropHint, HitAreasGenerator, JqTreeWidget, KeyHandler, 
MouseWidget, Node, NodeElement, Position, SaveStateHandler, ScrollHandler, 
SelectNodeHandler, SimpleWidget, __version__, drag_and_drop_handler, 
isFunction, node_module, ref, util_module,
-  extend = function(child, parent) { for (var key in parent) { if 
(hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { 
this.constructor = child; } ctor.prototype = parent.prototype; child.prototype 
= new ctor(); child.__super__ = parent.prototype; return child; },
-  hasProp = {}.hasOwnProperty;
-
-__version__ = require('./version');
-
-drag_and_drop_handler = require('./drag_and_drop_handler');
-
-ElementsRenderer = require('./elements_renderer');
-
-KeyHandler = require('./key_handler');
-
-MouseWidget = require('./mouse.widget');
-
-SaveStateHandler = require('./save_state_handler');
-
-ScrollHandler = require('./scroll_handler');
-
-SelectNodeHandler = require('./select_node_handler');
-
-SimpleWidget = require('./simple.widget');
-
-node_module = require('./node');
-
-Node = node_module.Node;
-
-Position = node_module.Position;
-
-util_module = require('./util');
-
-isFunction = util_module.isFunction;
-
-ref = require('./node_element'), BorderDropHint = ref.BorderDropHint, 
FolderElement = ref.FolderElement, GhostDropHint = ref.GhostDropHint, 
NodeElement = ref.NodeElement;
-
-DragAndDropHandler = drag_and_drop_handler.DragAndDropHandler, DragElement = 
drag_and_drop_handler.DragElement, HitAreasGenerator = 
drag_and_drop_handler.HitAreasGenerator;
-
-$ = jQuery;
-
-JqTreeWidget = (function(superClass) {
-  extend(JqTreeWidget, superClass);
-
-  function JqTreeWidget() {
-    return JqTreeWidget.__super__.constructor.apply(this, arguments);
-  }
-
-  JqTreeWidget.prototype.BorderDropHint = BorderDropHint;
-
-  JqTreeWidget.prototype.DragElement = DragElement;
-
-  JqTreeWidget.prototype.DragAndDropHandler = DragAndDropHandler;
-
-  JqTreeWidget.prototype.ElementsRenderer = ElementsRenderer;
-
-  JqTreeWidget.prototype.GhostDropHint = GhostDropHint;
-
-  JqTreeWidget.prototype.HitAreasGenerator = HitAreasGenerator;
-
-  JqTreeWidget.prototype.Node = Node;
-
-  JqTreeWidget.prototype.SaveStateHandler = SaveStateHandler;
-
-  JqTreeWidget.prototype.ScrollHandler = ScrollHandler;
-
-  JqTreeWidget.prototype.SelectNodeHandler = SelectNodeHandler;
-
-  JqTreeWidget.prototype.defaults = {
+    JqTreeWidget.prototype._getRtlOption = function () {
+        if (this.options.rtl != null) {
+            return this.options.rtl;
+        }
+        else {
+            var data_rtl = this.element.data("rtl");
+            if (data_rtl != null && data_rtl !== false) {
+                return true;
+            }
+            else {
+                return false;
+            }
+        }
+    };
+    JqTreeWidget.prototype._notifyLoading = function (is_loading, node, $el) {
+        if (this.options.onLoading) {
+            this.options.onLoading(is_loading, node, $el);
+        }
+    };
+    JqTreeWidget.prototype._selectNode = function (node, must_toggle) {
+        var _this = this;
+        if (must_toggle === void 0) { must_toggle = false; }
+        if (!this.select_node_handler) {
+            return;
+        }
+        var canSelect = function () {
+            if (_this.options.onCanSelectNode) {
+                return _this.options.selectable && 
_this.options.onCanSelectNode(node);
+            }
+            else {
+                return _this.options.selectable;
+            }
+        };
+        var openParents = function () {
+            var parent = node.parent;
+            if (parent && parent.parent && !parent.is_open) {
+                _this.openNode(parent, false);
+            }
+        };
+        var saveState = function () {
+            if (_this.options.saveState && _this.save_state_handler) {
+                _this.save_state_handler.saveState();
+            }
+        };
+        if (!node) {
+            // Called with empty node -> deselect current node
+            this._deselectCurrentNode();
+            saveState();
+            return;
+        }
+        if (!canSelect()) {
+            return;
+        }
+        if (this.select_node_handler.isNodeSelected(node)) {
+            if (must_toggle) {
+                this._deselectCurrentNode();
+                this._triggerEvent("tree.select", {
+                    node: null,
+                    previous_node: node
+                });
+            }
+        }
+        else {
+            var deselected_node = this.getSelectedNode();
+            this._deselectCurrentNode();
+            this.addToSelection(node);
+            this._triggerEvent("tree.select", {
+                node: node,
+                deselected_node: deselected_node
+            });
+            openParents();
+        }
+        saveState();
+    };
+    JqTreeWidget.prototype._loadData = function (data, parent_node) {
+        if (!data) {
+            return;
+        }
+        else {
+            this._triggerEvent("tree.load_data", { tree_data: data });
+            if (parent_node) {
+                this._deselectNodes(parent_node);
+                this._loadSubtree(data, parent_node);
+            }
+            else {
+                this._initTree(data);
+            }
+            if (this.isDragging() && this.dnd_handler) {
+                this.dnd_handler.refresh();
+            }
+        }
+    };
+    JqTreeWidget.prototype._deselectNodes = function (parent_node) {
+        if (this.select_node_handler) {
+            var selected_nodes_under_parent = 
this.select_node_handler.getSelectedNodesUnder(parent_node);
+            for (var _i = 0, selected_nodes_under_parent_1 = 
selected_nodes_under_parent; _i < selected_nodes_under_parent_1.length; _i++) {
+                var n = selected_nodes_under_parent_1[_i];
+                this.select_node_handler.removeFromSelection(n);
+            }
+        }
+    };
+    JqTreeWidget.prototype._loadSubtree = function (data, parent_node) {
+        parent_node.loadFromData(data);
+        parent_node.load_on_demand = false;
+        parent_node.is_loading = false;
+        this._refreshElements(parent_node);
+    };
+    JqTreeWidget.prototype._loadDataFromUrl = function (url_info_param, 
parent_node, on_finished) {
+        var _this = this;
+        var $el = null;
+        var url_info = url_info_param;
+        var addLoadingClass = function () {
+            $el = parent_node ? $(parent_node.element) : _this.element;
+            $el.addClass("jqtree-loading");
+            _this._notifyLoading(true, parent_node, $el);
+        };
+        var removeLoadingClass = function () {
+            if ($el) {
+                $el.removeClass("jqtree-loading");
+                _this._notifyLoading(false, parent_node, $el);
+            }
+        };
+        var parseUrlInfo = function () {
+            if ($.type(url_info) === "string") {
+                return { url: url_info };
+            }
+            if (!url_info.method) {
+                url_info.method = "get";
+            }
+            return url_info;
+        };
+        var handeLoadData = function (data) {
+            removeLoadingClass();
+            _this._loadData(data, parent_node);
+            if (on_finished && $.isFunction(on_finished)) {
+                on_finished();
+            }
+        };
+        var getDataFromResponse = function (response) { return 
($.isArray(response) || typeof response === "object"
+            ? response
+            : response != null ? $.parseJSON(response) : []); };
+        var filterData = function (data) { return (_this.options.dataFilter ? 
_this.options.dataFilter(data) : data); };
+        var handleSuccess = function (response) {
+            var data = filterData(getDataFromResponse(response));
+            handeLoadData(data);
+        };
+        var handleError = function (response) {
+            removeLoadingClass();
+            if (_this.options.onLoadFailed) {
+                _this.options.onLoadFailed(response);
+            }
+        };
+        var loadDataFromUrlInfo = function () {
+            var _url_info = parseUrlInfo();
+            $.ajax($.extend({}, _url_info, {
+                method: url_info.method != null ? 
url_info.method.toUpperCase() : "GET",
+                cache: false,
+                dataType: "json",
+                success: handleSuccess,
+                error: handleError
+            }));
+        };
+        if (!url_info_param) {
+            // Generate url for node

@@ Diff output truncated at 153600 characters. @@



reply via email to

[Prev in Thread] Current Thread [Next in Thread]