Changeset 7949


Ignore:
Timestamp:
May 10, 2021, 9:15:58 AM (7 months ago)
Author:
Nicklas Nordborg
Message:

Fixes #2251: Color-code entries in the change history list

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/core/ChangeHistory.java

    r7946 r7949  
    304304 
    305305  /**
     306    Get the ID of the transaction that initiated the change.
     307    @since 3.19
     308  */
     309  public int getTransactionId()
     310  {
     311    return getData().getChangeHistory().getId();
     312  }
     313 
     314  /**
    306315    Get the type of change that was made.
    307316  */
  • trunk/www/common/history/history.js

    r7604 r7949  
    6565  }
    6666
     67  history.initElements = function(element, autoInit)
     68  {
     69    if (autoInit != 'transact-box') return;
     70    Events.addEventHandler(element, 'mouseenter', history.mouseEnterTransactBox);
     71    Events.addEventHandler(element, 'mouseleave', history.mouseLeaveTransactBox);
     72  }
     73 
     74  history.mouseEnterTransactBox = function(event)
     75  {
     76    App.debug('enter:'+Data.get(event.currentTarget, 'transact-id'));
     77    Doc.addClass('history', 'transact-'+Data.get(event.currentTarget, 'transact-id'));
     78  }
     79 
     80  history.mouseLeaveTransactBox = function(event)
     81  {
     82    App.debug('leave:'+Data.get(event.currentTarget, 'transact-id'));
     83    Doc.removeClass('history', 'transact-'+Data.get(event.currentTarget, 'transact-id'));
     84  }
     85
    6786  return history;
    6887}();
    69 
     88Doc.addElementInitializer(History.initElements);
    7089Doc.onLoad(History.initPage);
  • trunk/www/common/history/list_history.jsp

    r7948 r7949  
    6060  import="java.util.Date"
    6161  import="java.util.Map"
     62  import="java.util.HashMap"
    6263%>
    6364<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    6768  private static final Item itemType = Item.CHANGEHISTORY;
    6869  private static final GuiContext guiContext = new GuiContext(itemType, GuiContext.Type.LIST);
     70  private static String[] COLORS = {"#ffb700","#ffc547","#ffd270","#ffdf96","#ffebbc","#f6dcb9","#f2c094","#efa177","#eb8064","#e65a5a"};
    6971%>
    7072<%
     
    104106  ExtensionsInvoker<ListColumnAction<ChangeHistory,?>> columnsInvoker = ListColumnUtil.useExtensions(jspContext);
    105107  int numListed = 0;
     108  StringBuilder transactStyles = new StringBuilder();
    106109  %>
    107110  <base:page type="iframe" id="list-history">
     
    109112    <ext:scripts context="<%=jspContext%>" />
    110113    <ext:stylesheets context="<%=jspContext%>" />
     114    <style>
     115    /* This works in the "icons" column due to position: sticky */
     116    /* It creates a rectangle with some padding (colors are added later) */
     117    .transact-box
     118    {
     119      position: absolute;
     120      right: 7px;
     121      top: 2px;
     122      bottom: 1px;
     123      width: 0.65em;
     124      border-width: 1px;
     125      border-color: #A0A0A0;
     126    }
     127    /* This box should touch with the previous row */
     128    .transact-box.same-as-previous
     129    {
     130      top: -1px;
     131      border-top-width: 0 !important;
     132    }
     133    /* This box should touch with the next row */
     134    .transact-box.same-as-next
     135    {
     136      bottom: -1px;
     137      border-bottom-width: 0 !important;
     138    }
     139    </style>
    111140  </base:head>
    112141  <base:body>
     
    372401          int selectedItemId = cc.getId();
    373402          if (history != null)
    374           {           
    375             while (history.hasNext())
     403          {
     404            int colorNo = 0;
     405            int prevTransactId = 0;
     406            int transactId = 0;
     407            int nextTransactId = 0;
     408            // TransactionID->Color is mapped on first entry with given TransactionID
     409            Map<Integer, String> colors = new HashMap<>();
     410            ChangeHistory nextItem = history.hasNext() ? history.next() : null;
     411            while (nextItem != null)
    376412            {
    377               ChangeHistory item = history.next();
     413              // We need access to the next item after the current one
     414              ChangeHistory item = nextItem;
     415              nextItem = history.hasNext() ? history.next() : null;
     416             
    378417              int itemId = item.getId();
     418              String name = HTML.encodeTags(item.getName());
    379419              String tooltip = mode.isSelectionMode() ?
    380420                  "Select this item" : "View this item";
    381421              index++;
    382422              numListed++;
     423             
     424              prevTransactId = transactId;
     425              transactId = item.getTransactionId();
     426              nextTransactId = nextItem != null ? nextItem.getTransactionId() : 0;             
     427              String color = colors.get(transactId);
     428              if (color == null)
     429              {
     430                color = COLORS[colorNo % COLORS.length];
     431                colorNo++;
     432                colors.put(transactId, color);
     433                transactStyles.append(".transact-"+transactId+" .transact-box.transact-"+transactId+" { border-width: 2px; border-color: black; }\n");
     434              }
    383435              %>
    384               <tbl:row>
     436              <tbl:row subclass="auto-init" data-auto-init="transact-box" data-transact-id="<%=transactId%>">
    385437                <tbl:header clazz="row-index bg-filled-100">
    386438                  <div class="index-<%=mode.getName()%>">
     
    402454                      />
    403455                    </div>
    404                     <div class="icons">
    405                     </div>
     456                    <div class="icons transact-box transact-<%=transactId%><%=transactId==prevTransactId?" same-as-previous":""%><%=transactId==nextTransactId?" same-as-next":""%>"
     457                      data-transact-id="<%=transactId%>" style="background-color: <%=color%>;"></div>
    406458                  </div>
    407459                </tbl:header>
     
    445497      </tbl:data>
    446498    </tbl:table>
    447      
    448      
     499   
     500    <style>
     501    /* Add borders around currently active transaction */
     502    <%=transactStyles.toString()%>
     503    </style> 
    449504  </base:body>
    450505  </base:page>
Note: See TracChangeset for help on using the changeset viewer.