Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
converse.js
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
converse.js
Commits
0d2b5bf1
Commit
0d2b5bf1
authored
Jan 06, 2018
by
Weblate
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
4effc662
96742a66
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
137 additions
and
37 deletions
+137
-37
dev.html
dev.html
+1
-0
spec/bookmarks.js
spec/bookmarks.js
+1
-0
spec/chatroom.js
spec/chatroom.js
+1
-1
src/converse-bookmarks.js
src/converse-bookmarks.js
+21
-12
src/converse-muc.js
src/converse-muc.js
+7
-7
src/converse-roomslist.js
src/converse-roomslist.js
+106
-15
src/converse-rosterview.js
src/converse-rosterview.js
+0
-2
No files found.
dev.html
View file @
0d2b5bf1
...
@@ -60,6 +60,7 @@
...
@@ -60,6 +60,7 @@
// 'prosody@conference.prosody.im',
// 'prosody@conference.prosody.im',
// 'jdev@conference.jabber.org'
// 'jdev@conference.jabber.org'
// ],
// ],
hide_open_bookmarks
:
true
,
notify_all_room_messages
:
[
notify_all_room_messages
:
[
'
discuss@conference.conversejs.org
'
'
discuss@conference.conversejs.org
'
],
],
...
...
spec/bookmarks.js
View file @
0d2b5bf1
...
@@ -477,6 +477,7 @@
...
@@ -477,6 +477,7 @@
return
true
;
return
true
;
}
}
}).
length
).
toBe
(
1
);
}).
length
).
toBe
(
1
);
var
stanza
=
$iq
({
'
to
'
:
_converse
.
connection
.
jid
,
'
type
'
:
'
result
'
,
'
id
'
:
IQ_id
})
var
stanza
=
$iq
({
'
to
'
:
_converse
.
connection
.
jid
,
'
type
'
:
'
result
'
,
'
id
'
:
IQ_id
})
.
c
(
'
pubsub
'
,
{
'
xmlns
'
:
Strophe
.
NS
.
PUBSUB
})
.
c
(
'
pubsub
'
,
{
'
xmlns
'
:
Strophe
.
NS
.
PUBSUB
})
.
c
(
'
items
'
,
{
'
node
'
:
'
storage:bookmarks
'
})
.
c
(
'
items
'
,
{
'
node
'
:
'
storage:bookmarks
'
})
...
...
spec/chatroom.js
View file @
0d2b5bf1
...
@@ -3146,7 +3146,7 @@
...
@@ -3146,7 +3146,7 @@
panel
.
onRoomsFound
(
iq
);
panel
.
onRoomsFound
(
iq
);
expect
(
$
(
panel
.
el
.
querySelector
(
'
#available-chatrooms
'
)).
children
(
'
dt
'
).
length
).
toBe
(
1
);
expect
(
$
(
panel
.
el
.
querySelector
(
'
#available-chatrooms
'
)).
children
(
'
dt
'
).
length
).
toBe
(
1
);
expect
(
$
(
panel
.
el
.
querySelector
(
'
#available-chatrooms
'
)).
children
(
'
dt
'
).
first
().
text
()).
toBe
(
"
Rooms
on muc.localhost
"
);
expect
(
$
(
panel
.
el
.
querySelector
(
'
#available-chatrooms
'
)).
children
(
'
dt
'
).
first
().
text
()).
toBe
(
"
Rooms
found
"
);
expect
(
$
(
panel
.
el
.
querySelector
(
'
#available-chatrooms
'
)).
children
(
'
dd
'
).
length
).
toBe
(
4
);
expect
(
$
(
panel
.
el
.
querySelector
(
'
#available-chatrooms
'
)).
children
(
'
dd
'
).
length
).
toBe
(
4
);
done
();
done
();
}));
}));
...
...
src/converse-bookmarks.js
View file @
0d2b5bf1
...
@@ -386,11 +386,6 @@
...
@@ -386,11 +386,6 @@
});
});
_converse
.
BookmarkView
=
Backbone
.
VDOMView
.
extend
({
_converse
.
BookmarkView
=
Backbone
.
VDOMView
.
extend
({
initialize
()
{
this
.
model
.
on
(
'
destroy
'
,
this
.
remove
.
bind
(
this
));
},
toHTML
()
{
toHTML
()
{
return
tpl_bookmark
({
return
tpl_bookmark
({
'
hidden
'
:
_converse
.
hide_open_bookmarks
&&
'
hidden
'
:
_converse
.
hide_open_bookmarks
&&
...
@@ -422,7 +417,9 @@
...
@@ -422,7 +417,9 @@
initialize
()
{
initialize
()
{
Backbone
.
OrderedListView
.
prototype
.
initialize
.
apply
(
this
,
arguments
);
Backbone
.
OrderedListView
.
prototype
.
initialize
.
apply
(
this
,
arguments
);
this
.
model
.
on
(
'
remove
'
,
this
.
hideListIfEmpty
,
this
);
this
.
model
.
on
(
'
add
'
,
this
.
showOrHide
,
this
);
this
.
model
.
on
(
'
remove
'
,
this
.
showOrHide
,
this
);
_converse
.
chatboxes
.
on
(
'
add
'
,
this
.
renderBookmarkListElement
,
this
);
_converse
.
chatboxes
.
on
(
'
add
'
,
this
.
renderBookmarkListElement
,
this
);
_converse
.
chatboxes
.
on
(
'
remove
'
,
this
.
renderBookmarkListElement
,
this
);
_converse
.
chatboxes
.
on
(
'
remove
'
,
this
.
renderBookmarkListElement
,
this
);
...
@@ -444,12 +441,17 @@
...
@@ -444,12 +441,17 @@
'
label_bookmarks
'
:
__
(
'
Bookmarks
'
),
'
label_bookmarks
'
:
__
(
'
Bookmarks
'
),
'
_converse
'
:
_converse
'
_converse
'
:
_converse
});
});
this
.
showOrHide
();
this
.
insertIntoControlBox
();
return
this
;
},
insertIntoControlBox
()
{
const
controlboxview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
const
controlboxview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
if
(
!
_
.
isUndefined
(
controlboxview
))
{
if
(
!
_
.
isUndefined
(
controlboxview
))
{
const
chatrooms_el
=
controlboxview
.
el
.
querySelector
(
'
#chatrooms
'
);
const
chatrooms_el
=
controlboxview
.
el
.
querySelector
(
'
#chatrooms
'
);
chatrooms_el
.
insertAdjacentElement
(
'
afterbegin
'
,
this
.
el
);
chatrooms_el
.
insertAdjacentElement
(
'
afterbegin
'
,
this
.
el
);
}
}
return
this
;
},
},
removeBookmark
:
_converse
.
removeBookmarkViaEvent
,
removeBookmark
:
_converse
.
removeBookmarkViaEvent
,
...
@@ -463,13 +465,20 @@
...
@@ -463,13 +465,20 @@
return
;
return
;
}
}
bookmarkview
.
render
();
bookmarkview
.
render
();
this
.
hideListIfEmpty
();
this
.
showOrHide
();
},
},
hideListIfEmpty
(
item
)
{
showOrHide
(
item
)
{
const
bookmarks
=
sizzle
(
'
.available-chatroom:not(.hidden)
'
,
this
.
el
);
if
(
_converse
.
hide_open_bookmarks
)
{
if
(
!
this
.
model
.
models
.
length
||
!
bookmarks
.
length
)
{
const
bookmarks
=
this
.
model
.
filter
((
bookmark
)
=>
u
.
hideElement
(
this
.
el
);
!
_converse
.
chatboxes
.
get
(
bookmark
.
get
(
'
jid
'
)));
if
(
!
bookmarks
.
length
)
{
u
.
hideElement
(
this
.
el
);
return
;
}
}
if
(
this
.
model
.
models
.
length
)
{
u
.
showElement
(
this
.
el
);
}
}
},
},
...
...
src/converse-muc.js
View file @
0d2b5bf1
...
@@ -28,11 +28,11 @@
...
@@ -28,11 +28,11 @@
"
tpl!chatroom_toolbar
"
,
"
tpl!chatroom_toolbar
"
,
"
tpl!chatrooms_tab
"
,
"
tpl!chatrooms_tab
"
,
"
tpl!info
"
,
"
tpl!info
"
,
"
tpl!no_rooms
"
,
"
tpl!occupant
"
,
"
tpl!occupant
"
,
"
tpl!room_description
"
,
"
tpl!room_description
"
,
"
tpl!room_item
"
,
"
tpl!room_item
"
,
"
tpl!room_panel
"
,
"
tpl!room_panel
"
,
"
tpl!rooms_results
"
,
"
tpl!spinner
"
,
"
tpl!spinner
"
,
"
awesomplete
"
,
"
awesomplete
"
,
"
converse-chatview
"
,
"
converse-chatview
"
,
...
@@ -59,11 +59,11 @@
...
@@ -59,11 +59,11 @@
tpl_chatroom_toolbar
,
tpl_chatroom_toolbar
,
tpl_chatrooms_tab
,
tpl_chatrooms_tab
,
tpl_info
,
tpl_info
,
tpl_no_rooms
,
tpl_occupant
,
tpl_occupant
,
tpl_room_description
,
tpl_room_description
,
tpl_room_item
,
tpl_room_item
,
tpl_room_panel
,
tpl_room_panel
,
tpl_rooms_results
,
tpl_spinner
,
tpl_spinner
,
Awesomplete
Awesomplete
)
{
)
{
...
@@ -2196,7 +2196,6 @@
...
@@ -2196,7 +2196,6 @@
tagName
:
'
li
'
,
tagName
:
'
li
'
,
initialize
()
{
initialize
()
{
this
.
model
.
on
(
'
change
'
,
this
.
render
,
this
);
this
.
model
.
on
(
'
change
'
,
this
.
render
,
this
);
this
.
model
.
on
(
'
destroy
'
,
this
.
destroy
,
this
);
},
},
toHTML
()
{
toHTML
()
{
...
@@ -2635,8 +2634,8 @@
...
@@ -2635,8 +2634,8 @@
informNoRoomsFound
()
{
informNoRoomsFound
()
{
const
chatrooms_el
=
this
.
el
.
querySelector
(
'
#available-chatrooms
'
);
const
chatrooms_el
=
this
.
el
.
querySelector
(
'
#available-chatrooms
'
);
chatrooms_el
.
innerHTML
=
tpl_
no_room
s
({
chatrooms_el
.
innerHTML
=
tpl_
rooms_result
s
({
'
no_rooms
_text
'
:
__
(
'
No rooms found
'
)
'
feedback
_text
'
:
__
(
'
No rooms found
'
)
});
});
const
input_el
=
this
.
el
.
querySelector
(
'
input#show-rooms
'
);
const
input_el
=
this
.
el
.
querySelector
(
'
input#show-rooms
'
);
input_el
.
classList
.
remove
(
'
hidden
'
)
input_el
.
classList
.
remove
(
'
hidden
'
)
...
@@ -2652,8 +2651,9 @@
...
@@ -2652,8 +2651,9 @@
if
(
this
.
rooms
.
length
)
{
if
(
this
.
rooms
.
length
)
{
// For translators: %1$s is a variable and will be
// For translators: %1$s is a variable and will be
// replaced with the XMPP server name
// replaced with the XMPP server name
available_chatrooms
.
innerHTML
=
available_chatrooms
.
innerHTML
=
tpl_rooms_results
({
`<dt>
${
__
(
'
Rooms on %1$s
'
,
this
.
model
.
get
(
'
muc_domain
'
))}
</dt>`
;
'
feedback_text
'
:
__
(
'
Rooms found
'
)
});
const
div
=
document
.
createElement
(
'
div
'
);
const
div
=
document
.
createElement
(
'
div
'
);
const
fragment
=
document
.
createDocumentFragment
();
const
fragment
=
document
.
createDocumentFragment
();
for
(
let
i
=
0
;
i
<
this
.
rooms
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
this
.
rooms
.
length
;
i
++
)
{
...
...
src/converse-roomslist.js
View file @
0d2b5bf1
...
@@ -18,6 +18,7 @@
...
@@ -18,6 +18,7 @@
],
factory
);
],
factory
);
}(
this
,
function
(
utils
,
converse
,
muc
,
tpl_rooms_list
,
tpl_rooms_list_item
)
{
}(
this
,
function
(
utils
,
converse
,
muc
,
tpl_rooms_list
,
tpl_rooms_list_item
)
{
const
{
Backbone
,
Promise
,
b64_sha1
,
sizzle
,
_
}
=
converse
.
env
;
const
{
Backbone
,
Promise
,
b64_sha1
,
sizzle
,
_
}
=
converse
.
env
;
const
u
=
converse
.
env
.
utils
;
converse
.
plugins
.
add
(
'
converse-roomslist
'
,
{
converse
.
plugins
.
add
(
'
converse-roomslist
'
,
{
...
@@ -42,13 +43,93 @@
...
@@ -42,13 +43,93 @@
const
{
_converse
}
=
this
,
const
{
_converse
}
=
this
,
{
__
}
=
_converse
;
{
__
}
=
_converse
;
_converse
.
OpenRooms
=
Backbone
.
Collection
.
extend
({
comparator
(
room
)
{
if
(
room
.
get
(
'
bookmarked
'
))
{
const
bookmark
=
_
.
head
(
_converse
.
bookmarksview
.
model
.
where
({
'
jid
'
:
room
.
get
(
'
jid
'
)}));
return
bookmark
.
get
(
'
name
'
);
}
else
{
return
room
.
get
(
'
name
'
);
}
},
initialize
()
{
this
.
browserStorage
=
new
Backbone
.
BrowserStorage
[
_converse
.
storage
](
b64_sha1
(
`converse.open-rooms-{_converse.bare_jid}`
));
_converse
.
chatboxes
.
on
(
'
add
'
,
this
.
onChatBoxAdded
,
this
);
_converse
.
chatboxes
.
on
(
'
change:bookmarked
'
,
this
.
onChatBoxChanged
,
this
);
_converse
.
chatboxes
.
on
(
'
change:name
'
,
this
.
onChatBoxChanged
,
this
);
_converse
.
chatboxes
.
on
(
'
change:num_unread
'
,
this
.
onChatBoxChanged
,
this
);
_converse
.
chatboxes
.
on
(
'
change:num_unread_general
'
,
this
.
onChatBoxChanged
,
this
);
_converse
.
chatboxes
.
on
(
'
remove
'
,
this
.
onChatBoxRemoved
,
this
);
this
.
reset
(
_
.
map
(
_converse
.
chatboxes
.
where
({
'
type
'
:
'
chatroom
'
}),
'
attributes
'
));
},
onChatBoxAdded
(
item
)
{
if
(
item
.
get
(
'
type
'
)
===
'
chatroom
'
)
{
this
.
create
(
item
.
attributes
);
}
},
onChatBoxChanged
(
item
)
{
if
(
item
.
get
(
'
type
'
)
===
'
chatroom
'
)
{
const
room
=
this
.
get
(
item
.
get
(
'
jid
'
));
if
(
!
_
.
isNil
(
room
))
{
room
.
set
(
item
.
attributes
);
}
}
},
onChatBoxRemoved
(
item
)
{
if
(
item
.
get
(
'
type
'
)
===
'
chatroom
'
)
{
const
room
=
this
.
get
(
item
.
get
(
'
jid
'
))
this
.
remove
(
room
);
}
}
});
_converse
.
RoomsList
=
Backbone
.
Model
.
extend
({
_converse
.
RoomsList
=
Backbone
.
Model
.
extend
({
defaults
:
{
defaults
:
{
"
toggle-state
"
:
_converse
.
OPENED
"
toggle-state
"
:
_converse
.
OPENED
}
}
});
});
_converse
.
RoomsListView
=
Backbone
.
NativeView
.
extend
({
_converse
.
RoomsListElementView
=
Backbone
.
VDOMView
.
extend
({
initialize
()
{
this
.
model
.
on
(
'
destroy
'
,
this
.
remove
,
this
);
this
.
model
.
on
(
'
remove
'
,
this
.
remove
,
this
);
this
.
model
.
on
(
'
change:bookmarked
'
,
this
.
render
,
this
);
this
.
model
.
on
(
'
change:name
'
,
this
.
render
,
this
);
this
.
model
.
on
(
'
change:num_unread
'
,
this
.
render
,
this
);
this
.
model
.
on
(
'
change:num_unread_general
'
,
this
.
render
,
this
);
},
getRoomsListElementName
()
{
if
(
this
.
model
.
get
(
'
bookmarked
'
))
{
const
bookmark
=
_
.
head
(
_converse
.
bookmarksview
.
model
.
where
({
'
jid
'
:
this
.
model
.
get
(
'
jid
'
)}));
return
bookmark
.
get
(
'
name
'
);
}
else
{
return
this
.
model
.
get
(
'
name
'
);
}
},
toHTML
()
{
return
tpl_rooms_list_item
(
_
.
extend
(
this
.
model
.
toJSON
(),
{
'
allow_bookmarks
'
:
_converse
.
allow_bookmarks
,
'
info_leave_room
'
:
__
(
'
Leave this room
'
),
'
info_remove_bookmark
'
:
__
(
'
Unbookmark this room
'
),
'
info_add_bookmark
'
:
__
(
'
Bookmark this room
'
),
'
info_title
'
:
__
(
'
Show more information on this room
'
),
'
name
'
:
this
.
getRoomsListElementName
(),
'
open_title
'
:
__
(
'
Click to open this room
'
)
}));
}
});
_converse
.
RoomsListView
=
Backbone
.
OrderedListView
.
extend
({
tagName
:
'
div
'
,
tagName
:
'
div
'
,
className
:
'
open-rooms-list rooms-list-container
'
,
className
:
'
open-rooms-list rooms-list-container
'
,
events
:
{
events
:
{
...
@@ -57,16 +138,15 @@
...
@@ -57,16 +138,15 @@
'
click .open-rooms-toggle
'
:
'
toggleRoomsList
'
,
'
click .open-rooms-toggle
'
:
'
toggleRoomsList
'
,
'
click .remove-bookmark
'
:
'
removeBookmark
'
,
'
click .remove-bookmark
'
:
'
removeBookmark
'
,
},
},
listSelector
:
'
.rooms-list
'
,
ItemView
:
_converse
.
RoomsListElementView
,
subviewIndex
:
'
jid
'
,
initialize
()
{
initialize
()
{
this
.
toggleRoomsList
=
_
.
debounce
(
this
.
toggleRoomsList
,
600
,
{
'
leading
'
:
true
}
);
Backbone
.
OrderedListView
.
prototype
.
initialize
.
apply
(
this
,
arguments
);
this
.
model
.
on
(
'
add
'
,
this
.
renderRoomsListElement
,
this
);
this
.
model
.
on
(
'
add
'
,
this
.
showOrHide
,
this
);
this
.
model
.
on
(
'
change:bookmarked
'
,
this
.
renderRoomsListElement
,
this
);
this
.
model
.
on
(
'
remove
'
,
this
.
showOrHide
,
this
);
this
.
model
.
on
(
'
change:name
'
,
this
.
renderRoomsListElement
,
this
);
this
.
model
.
on
(
'
change:num_unread
'
,
this
.
renderRoomsListElement
,
this
);
this
.
model
.
on
(
'
change:num_unread_general
'
,
this
.
renderRoomsListElement
,
this
);
this
.
model
.
on
(
'
remove
'
,
this
.
removeRoomsListElement
,
this
);
const
cachekey
=
`converse.roomslist
${
_converse
.
bare_jid
}
`
;
const
cachekey
=
`converse.roomslist
${
_converse
.
bare_jid
}
`
;
this
.
list_model
=
new
_converse
.
RoomsList
();
this
.
list_model
=
new
_converse
.
RoomsList
();
...
@@ -76,6 +156,7 @@
...
@@ -76,6 +156,7 @@
);
);
this
.
list_model
.
fetch
();
this
.
list_model
.
fetch
();
this
.
render
();
this
.
render
();
this
.
sortAndPositionAllItems
();
},
},
render
()
{
render
()
{
...
@@ -85,13 +166,16 @@
...
@@ -85,13 +166,16 @@
'
desc_rooms
'
:
__
(
'
Click to toggle the rooms list
'
),
'
desc_rooms
'
:
__
(
'
Click to toggle the rooms list
'
),
'
label_rooms
'
:
__
(
'
Open Rooms
'
)
'
label_rooms
'
:
__
(
'
Open Rooms
'
)
});
});
this
.
hide
();
if
(
this
.
list_model
.
get
(
'
toggle-state
'
)
!==
_converse
.
OPENED
)
{
if
(
this
.
list_model
.
get
(
'
toggle-state
'
)
!==
_converse
.
OPENED
)
{
this
.
el
.
querySelector
(
'
.open-rooms-list
'
).
classList
.
add
(
'
collapsed
'
);
this
.
el
.
querySelector
(
'
.open-rooms-list
'
).
classList
.
add
(
'
collapsed
'
);
}
}
this
.
model
.
each
(
this
.
renderRoomsListElement
.
bind
(
this
));
this
.
showOrHide
();
const
controlboxview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
this
.
insertIntoControlBox
();
return
this
;
},
insertIntoControlBox
()
{
const
controlboxview
=
_converse
.
chatboxviews
.
get
(
'
controlbox
'
);
if
(
!
_
.
isUndefined
(
controlboxview
)
&&
if
(
!
_
.
isUndefined
(
controlboxview
)
&&
!
document
.
body
.
contains
(
this
.
el
))
{
!
document
.
body
.
contains
(
this
.
el
))
{
const
container
=
controlboxview
.
el
.
querySelector
(
'
#chatrooms
'
);
const
container
=
controlboxview
.
el
.
querySelector
(
'
#chatrooms
'
);
...
@@ -99,15 +183,14 @@
...
@@ -99,15 +183,14 @@
container
.
insertBefore
(
this
.
el
,
container
.
firstChild
);
container
.
insertBefore
(
this
.
el
,
container
.
firstChild
);
}
}
}
}
return
this
.
el
;
},
},
hide
()
{
hide
()
{
this
.
el
.
classList
.
add
(
'
hidden
'
);
u
.
hideElement
(
this
.
el
);
},
},
show
()
{
show
()
{
this
.
el
.
classList
.
remove
(
'
hidden
'
);
u
.
showElement
(
this
.
el
);
},
},
closeRoom
(
ev
)
{
closeRoom
(
ev
)
{
...
@@ -146,6 +229,14 @@
...
@@ -146,6 +229,14 @@
this
.
show
();
this
.
show
();
},
},
showOrHide
(
item
)
{
if
(
!
this
.
model
.
models
.
length
)
{
u
.
hideElement
(
this
.
el
);
}
else
{
u
.
showElement
(
this
.
el
);
}
},
removeBookmark
:
_converse
.
removeBookmarkViaEvent
,
removeBookmark
:
_converse
.
removeBookmarkViaEvent
,
addBookmark
:
_converse
.
addBookmarkViaEvent
,
addBookmark
:
_converse
.
addBookmarkViaEvent
,
...
@@ -181,7 +272,7 @@
...
@@ -181,7 +272,7 @@
const
initRoomsListView
=
function
()
{
const
initRoomsListView
=
function
()
{
_converse
.
rooms_list_view
=
new
_converse
.
RoomsListView
(
_converse
.
rooms_list_view
=
new
_converse
.
RoomsListView
(
{
'
model
'
:
_converse
.
chatboxes
}
{
'
model
'
:
new
_converse
.
OpenRooms
()
}
);
);
};
};
...
...
src/converse-rosterview.js
View file @
0d2b5bf1
...
@@ -609,8 +609,6 @@
...
@@ -609,8 +609,6 @@
},
},
onRemove
(
contact
)
{
onRemove
(
contact
)
{
this
.
get
(
contact
.
get
(
'
id
'
)).
remove
();
this
.
remove
(
contact
.
get
(
'
id
'
));
if
(
this
.
model
.
contacts
.
length
===
0
)
{
if
(
this
.
model
.
contacts
.
length
===
0
)
{
this
.
el
.
parentElement
.
removeChild
(
this
.
el
);
this
.
el
.
parentElement
.
removeChild
(
this
.
el
);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment