@@ -20,7 +20,7 @@ var ElasticsearchService_ = (function() {
2020  // 2] Pre-request logic 
2121
2222  /** Update the status field of tables that have changed */ 
23-   function  markTableAsPending ( tableName )  { 
23+   function  markTableAsPending ( tableName ,   message )  { 
2424    try  { 
2525      var  savedObjects  =  ManagementService_ . listSavedObjects ( /*discardRange*/ false ) 
2626      var  tableConfig  =  savedObjects [ tableName ] 
@@ -32,8 +32,11 @@ var ElasticsearchService_ = (function() {
3232        var  tableRange  =  TableRangeUtils_ . findTableRange ( ss ,  tableName ) 
3333        if  ( tableRange )  { 
3434          var  range  =  tableRange . getRange ( ) 
35-           var  statusInfo  =  "AWAITING REFRESH ["  +  TableRangeUtils_ . formatDate ( )  +  "]" 
36-           var  tableMeta  =  ElasticsearchRequestUtils_ . buildTableOutline ( tableName ,  tableConfig ,  range ,  statusInfo ,  /*testMode*/ false ) 
35+           var  statusMessage  =  message  ||  "AWAITING REFRESH" 
36+           var  statusInfo  =  statusMessage  +  " ["  +  TableRangeUtils_ . formatDate ( )  +  "]" 
37+           var  tableMeta  =  ElasticsearchRequestUtils_ . buildTableOutline ( 
38+             tableName ,  tableConfig ,  range ,  statusInfo ,  /*testMode*/ false 
39+           ) 
3740        } 
3841      } 
3942    }  catch  ( err )  { }  //(fire and forget, just for display) 
@@ -50,6 +53,11 @@ var ElasticsearchService_ = (function() {
5053        return  {  "es_meta" : esInfo  } 
5154     } 
5255
56+      // If ES is enavled we're not going to do anything to the table: 
57+      if  ( ( false  ==  esInfo . enabled )  ||  ! esInfo . url )  { 
58+        testMode  =  true 
59+      } 
60+ 
5361     // Table metadata/validation 
5462
5563     // Revalidate range: 
@@ -262,37 +270,88 @@ var ElasticsearchService_ = (function() {
262270  } 
263271
264272  /** Trigger for edit */ 
265-   function  handleContentUpdates ( range ,  triggerOverride )  { 
273+   function  handleContentUpdates ( event ,  triggerOverride )  { 
266274    //(copy paste from ElasticsearchManager.isTriggerEnabled_) 
267275    var  isTriggerEnabled  =  function ( tableConfig ,  trigger )  { 
268-       var  tableTrigger  =  tableConfig . trigger  ||  "content_change " 
276+       var  tableTrigger  =  tableConfig . trigger  ||  "control_change " 
269277      switch ( trigger )  { 
270278        case  "manual" :
271279          return  ( tableTrigger  !=  "disabled" ) 
272280        case  "config_change" :
273281          return  ( tableTrigger  !=  "disabled" )  &&  ( tableTrigger  !=  "manual" ) 
282+         case  "control_change" :
283+           return  ( tableTrigger  ==  "control_change" )  ||  ( tableTrigger  ==  "content_change" ) 
274284        case  "content_change" :
275285          return  ( tableTrigger  ==  "content_change" ) 
276286        default :
277287          return  true 
278288      } 
279289    } 
280-     var  trigger  =  triggerOverride  ||  "content_change" 
281290    var  triggerPolicy  =  ManagementService_ . getEsTriggerPolicy ( ) 
282-     if  ( ! triggerOverride  &&  ( "timed_content"  !=  triggerPolicy ) )  { 
283-       return 
291+     var  canBeTriggeredByContentChange  = 
292+       ( "timed_control"  ==  triggerPolicy )  ||  ( "timed_content"  ==  triggerPolicy ) 
293+     if  ( ! triggerOverride  &&  ! canBeTriggeredByContentChange )  { 
294+       return  - 1 
284295    } 
285-     var  matchingTables  =  TableService_ . findTablesIntersectingRange ( range ) 
296+     var  updatedTables  =  0 
297+     var  matchingTables  =  TableService_ . findTablesIntersectingRange ( event . range ,  /*addRange*/ true ) 
286298    Object . keys ( matchingTables ) . forEach ( function ( matchingTableName )  { 
299+       //TODO: also need to handle 2-way sync regardless of table trigger 
287300      var  tableConfig  =  matchingTables [ matchingTableName ] 
288-       tableConfig  =  tableConfig . temp  ? tableConfig . temp  : tableConfig 
289-       if  ( isTriggerEnabled ( tableConfig ,  trigger ) )  { 
301+       var  activeRange  =  tableConfig . activeRange 
302+       delete  tableConfig . activeRange  //(remove extra non-standard field) 
303+       tableConfig  =  tableConfig . temp  ? tableConfig . temp  : tableConfig  //(use current version, not saved) 
304+ 
305+       // Logic to determine if a table edit hits the control cells (query/page) 
306+       var  isControlEvent  =  function ( )  { 
307+         // Check metadata to see if it's a control or content change 
308+         var  retVal  =  ElasticsearchRequestUtils_ . buildTableOutline ( 
309+           matchingTableName ,  tableConfig ,  activeRange ,  "" ,  /*testMode*/ true 
310+         ) 
311+         var  offsets  =  [  "query_offset" ,  "page_info_offset"  ] 
312+         var  modifiedOffsets  =  offsets 
313+           . filter ( function ( offset )  { 
314+             return  retVal . hasOwnProperty ( offset ) 
315+           } ) 
316+           . filter ( function ( offset )  { 
317+             var  newRange  =  activeRange . offset ( 
318+               retVal [ offset ] . row  -  1 ,  retVal [ offset ] . col  -  1 ,  1 ,  1 
319+             ) 
320+             return  TableRangeUtils_ . doRangesIntersect ( event . range ,  newRange ) 
321+           } ) 
322+ 
323+         if  ( modifiedOffsets . length  >  0 )  { 
324+           if  ( modifiedOffsets . indexOf ( "query_offset" )  >=  0 )  {  //query has changed... 
325+             //...if the page is hand specified, reset to 1 
326+             if  ( retVal . page_info_offset )  { 
327+               var  pageRange  =  activeRange . offset ( 
328+                 retVal . page_info_offset . row  -  1 ,  retVal . page_info_offset . col  -  1 ,  1 ,  1 
329+               ) 
330+               if  ( ! pageRange . getFormulaR1C1 ( ) )  { 
331+                 pageRange . setValue ( 1 ) 
332+               } 
333+             } 
334+           } 
335+           return  true 
336+         }  else  { 
337+           return  false 
338+         } 
339+       } 
340+       var  triggerToUse  =  triggerOverride  ?
341+         triggerOverride  :
342+         ( isControlEvent ( )  ? "control_change"  : "content_change" ) 
343+ 
344+       if  ( isTriggerEnabled ( tableConfig ,  triggerToUse ) )  { 
290345        markTableAsPending ( matchingTableName ) 
291346        ManagementService_ . setSavedObjectTrigger ( 
292-           matchingTableName ,  trigger 
347+           matchingTableName ,  triggerToUse 
293348        ) 
294-       } 
295-     } ) 
349+         updatedTables ++ 
350+       }  else  if  ( "disabled"  !=  tableConfig . trigger )  {  // Just note the table has been changed 
351+         markTableAsPending ( matchingTableName ,  "HAND EDITED" ) 
352+       } //(if the table is disabled, do nothing) 
353+     } ) //(end loop over intersecting tables) 
354+     return  updatedTables 
296355  } 
297356
298357  //////////////////////////////////////////////////////// 
0 commit comments