@@ -16,6 +16,19 @@ jQuery( function( $ ) {
16
16
$ ( '#post-table' ) . replaceWith ( newTable ) ;
17
17
} ;
18
18
19
+ // Regenerates a single updated post.
20
+ var regeneratePost = function ( updatedPost ) {
21
+ g_posts . filter ( function ( post ) {
22
+ if ( post . id === updatedPost . id ) {
23
+ var index = g_posts . indexOf ( post ) ;
24
+ g_posts [ index ] = updatedPost ;
25
+ }
26
+ } ) ;
27
+
28
+ var row = generatePostRow ( updatedPost , g_users ) ;
29
+ $ ( 'tr[key="' + updatedPost . id + '"]' ) . replaceWith ( row ) ;
30
+ } ;
31
+
19
32
// Creates a new table to display post results.
20
33
var generateTable = function ( posts , users ) {
21
34
var i18n = screen_data . i18n ;
@@ -33,38 +46,46 @@ jQuery( function( $ ) {
33
46
34
47
// For each post, create a row.
35
48
posts . filter ( function ( post ) {
36
- var row = $ ( '<tr/>' ) . appendTo ( table ) ;
37
-
38
- // Post Title
39
- var titleCell = $ ( '<td/>' ) . appendTo ( row ) ;
40
- $ ( '<a/>' , {
41
- 'href' : post . link ,
42
- text : post . title . rendered
43
- } ) . appendTo ( titleCell ) ;
44
-
45
- // Post Author
46
- var author = users [ post . author . toString ( ) ] ;
47
- var authorCell = $ ( '<td/>' ) . appendTo ( row ) ;
48
- $ ( '<a/>' , {
49
- 'href' : author . link ,
50
- text : author . name
51
- } ) . appendTo ( authorCell ) ;
52
-
53
- // Sticky
54
- var stickyCell = $ ( '<td/>' ) . appendTo ( row ) ;
55
- var stickyInput = $ ( '<input/>' , {
56
- 'type' : 'checkbox' ,
57
- } ) . appendTo ( stickyCell ) ;
58
- stickyInput . prop ( 'checked' , post . sticky ) ;
59
-
60
- stickyInput . on ( 'change' , function ( evt ) {
61
- toggleSticky ( post , stickyInput ) ;
62
- } ) ;
49
+ var row = generatePostRow ( post , users ) ;
50
+ row . appendTo ( table ) ;
63
51
} ) ;
64
52
65
53
return table ;
66
54
} ;
67
55
56
+ // Creates a new TR element for a post.
57
+ var generatePostRow = function ( post , users ) {
58
+ var row = $ ( '<tr/>' , { 'key' : post . id } ) ;
59
+
60
+ // Post Title
61
+ var titleCell = $ ( '<td/>' ) . appendTo ( row ) ;
62
+ $ ( '<a/>' , {
63
+ 'href' : post . link ,
64
+ text : post . title . rendered
65
+ } ) . appendTo ( titleCell ) ;
66
+
67
+ // Post Author
68
+ var author = users [ post . author . toString ( ) ] ;
69
+ var authorCell = $ ( '<td/>' ) . appendTo ( row ) ;
70
+ $ ( '<a/>' , {
71
+ 'href' : author . link ,
72
+ text : author . name
73
+ } ) . appendTo ( authorCell ) ;
74
+
75
+ // Sticky
76
+ var stickyCell = $ ( '<td/>' ) . appendTo ( row ) ;
77
+ var stickyInput = $ ( '<input/>' , {
78
+ 'type' : 'checkbox' ,
79
+ } ) . appendTo ( stickyCell ) ;
80
+ stickyInput . prop ( 'checked' , post . sticky ) ;
81
+
82
+ stickyInput . on ( 'change' , function ( evt ) {
83
+ toggleSticky ( post , stickyInput ) ;
84
+ } ) ;
85
+
86
+ return row ;
87
+ }
88
+
68
89
// Returns the ids which aren't in the users list.
69
90
var filterUnfetchedUsers = function ( ids , users ) {
70
91
var unfetched = [ ] ;
@@ -118,6 +139,7 @@ jQuery( function( $ ) {
118
139
} ) ;
119
140
} ;
120
141
142
+ // Toggles the sticky state of a post.
121
143
var toggleSticky = function ( post , checkbox ) {
122
144
var sticky = ! post . sticky ;
123
145
checkbox . prop ( 'disabled' , true ) ;
@@ -133,30 +155,26 @@ jQuery( function( $ ) {
133
155
} ,
134
156
success : function ( data ) {
135
157
// Update the global state
136
- g_posts [ data . id ] = data ;
158
+ regeneratePost ( data ) ;
137
159
} ,
138
160
error : function ( req ) {
139
161
console . error ( 'error on sticky update' ) ;
140
162
console . error ( req ) ;
141
- } ,
142
- complete : function ( ) {
143
- // Either way, make sure the checkbox matches.
144
- var sticky = g_posts [ post . id ] . sticky ;
145
- if ( sticky !== checkbox . prop ( 'checked' ) ) {
146
- checkbox . prop ( 'checked' , g_posts [ post . id ] . sticky ) ;
147
- }
148
- checkbox . prop ( 'disabled' , false ) ;
163
+ // Reset the post to its previous state.
164
+ regeneratePost ( post ) ;
149
165
}
150
166
} ) ;
151
167
} ;
152
168
169
+ // Clears the search timeout.
153
170
var clearTimeout = function ( ) {
154
171
if ( g_searchTimeout ) {
155
172
window . clearTimeout ( g_searchTimeout ) ;
156
173
g_searchTimeout = null ;
157
174
}
158
175
} ;
159
176
177
+ // Sends an API call to search for posts.
160
178
var searchPosts = function ( ) {
161
179
updateMessage ( screen_data . i18n . loading ) ;
162
180
0 commit comments