Time tracker in DFFS

Home Forums Classic DFFS Time tracker in DFFS

Viewing 7 reply threads
  • Author
    Posts
    • #19532
      Leon Perdue
      Participant

        Hi Alex,

        I am having issues with the time tracker you posted a while ago: time-tracker-in-a-dffs-enabled-list

        I used this with my SP2010 site, which was recently upgraded to 2013. I now get a JS error when a new item is started. When hitting OK the start timer button is not showing.

        I created a new list, and added the code itself, the button shows and starts the timer. I then added each new column one at a time, and figured out the error only occurs when the multiple lines of text column are added. I’ve tried plain text and enhanced rich text.

        Hoping you can help me figure this one out.

        Thank you

        Attachments:
      • #19568
        Alexander Bautz
        Keymaster

          It’s hard to tell, but if you could attach the Custom JS code here I might be able to see what could be wrong.

          Do you see any errors in the console (hit F12 > Console)?

          Alexander

        • #19617
          Leon Perdue
          Participant

            Sorry for the delay:

            using the same code you provided in the topic

            
            
            (function(){
             var a = [], b = [], tt;
             a.push("<tr style='font-size:18px;color:green;'>");
             a.push("<td colspan='2' style='padding:2px;'>");
             a.push("<span id='elapsedTime'></span><span id='totalTime'></span>"); 
             a.push("</td>");
             a.push("</tr>");
             $("table.ms-formtable").prepend(a.join(""));
             b.push("<span title='You can save and close the list item while the timer is running. It will keep tracking time until you edit the item and click \"Stop the timer\".'>");
             b.push("<input style='background-color:#C2CF8A;color:#444;' type='button' id='dffsTimeTrackerStartBtn' value='Start the timer' onclick='startTicker()'>");
             b.push("<input style='background-color:#D57C7C;color:#ffffff;display:none;' type='button' id='dffsTimeTrackerStopBtn' value='Stop the timer' onclick='stopTicker()'>");
             b.push("<span>&nbsp;</span>");
             b.push("</span>");
             $("input[id$='_diidIOSaveItem']:last").before(b.join(""));
             tt = getFieldValue("TotalTimeString");
             if(tt !== ""){
             $("#elapsedTime").html("Total time: "+getFriendlyTime(Number(tt)));
             }
            })();
            
            function startTicker(){
             var a= getFieldValue("StartTimeString");
             if(a === ""){
             setFieldValue("StartTimeString",new Date().valueOf());
             $("#dffsTimeTrackerStartBtn").hide();
             $("#dffsTimeTrackerStopBtn").show();
             $("#totalTime").html("");
             }
            }
            
            function stopTicker(){
             var a = getFieldValue("StartTimeString")
             , b = new Date().valueOf()
             , u = spjs.utility.userInfo(_spPageContextInfo.userId)
             , et = b-Number(a)
             , tt = Number(getFieldValue("TotalTimeString")) + et
             , log = getFieldValue("Log")
             , al = getFieldValue("Activity");
             setFieldValue("TotalTimeString",Number(tt));
             // Reset start time and log
             setFieldValue("StartTimeString","");
             setFieldValue("Activity","");
             if(a !== ""){
             if(log !== ""){
             log += "\n*******************\n";
             }
             if(al !== ""){
             al = "\n\nActivity log:\n"+al;
             }
             setFieldValue("Log",log+u.Title+"\nStart: "+new Date(Number(a)).toLocaleString(_spPageContextInfo.currentUICultureName)+"\nEnd: "+new Date().toLocaleString(_spPageContextInfo.currentUICultureName)+"\nElapsed time="+getFriendlyTime(et)+al);
             }
             $("#elapsedTime").html("");
             $("#totalTime").html("Total time: "+getFriendlyTime(tt));
             $("#dffsTimeTrackerStartBtn").show();
             $("#dffsTimeTrackerStopBtn").hide();
            }
            
            function getFriendlyTime(ms){
             var h, m, s;
             h = Math.floor(ms / 3600000);
             m = Math.floor((ms % 3600000) / 60000);
             s = Math.floor((ms % 60000) / 1000);
             return (h<10?"0"+h:h)+":"+(m<10?"0"+m:m)+":"+(s<10?"0"+s:s);
            }
            
            if(getFieldValue("StartTimeString") !== ""){
             $("#dffsTimeTrackerStartBtn").hide();
             $("#dffsTimeTrackerStopBtn").show();
            }
            
            setInterval(function(){
             var a = getFieldValue("StartTimeString"), b = new Date().valueOf(), tt = Number(getFieldValue("TotalTimeString"));
             if(a !== ""){
             $("#elapsedTime").html("Elapsed time: "+getFriendlyTime(b - Number(a))); 
             if(tt !== ""){
             $("#elapsedTime").append(" / Total time: "+getFriendlyTime(tt + (b - Number(a))));
             }
             } 
            },1000);

            console message:
            jquery.js:4 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help, check https://xhr.spec.whatwg.org/.

            When i delete any multi line text field i get no error.

            Attachments:
          • #19670
            Alexander Bautz
            Keymaster

              From this error it looks like you it fails in this line:

              $("table.ms-formtable").prepend(a.join(""));

              This is a bit strange because this is the default formtable. Could you try hitting F12 > console and type this in the console:

              $("table.ms-formtable").length;

              It should ouptput “1” when you hit enter.

              The console error is “by design” and doesn’t result in any actual error – is related to a synchronous ajax request. I’ll fix this in a future DFFS update to make it asynchronous.

              Alexander

            • #19672
              Leon Perdue
              Participant

                Hi Alexander,

                Here is the console response

                $(“table.ms-formtable”).length;
                VM344:1 Uncaught TypeError: Cannot read property ‘length’ of null
                at <anonymous>:1:24

              • #19678
                Alexander Bautz
                Keymaster

                  OK, this is strange. Is this a normal SharePoint form, or has it been modified in SharePoint Designer?

                  Alexander

                • #19688
                  Leon Perdue
                  Participant

                    It is a normal SP 2013 custom list. The form is only customized with DFFS.

                    I even tried creating a brand new test list and get the same errors.

                  • #19732
                    Alexander Bautz
                    Keymaster

                      What kind of list template did you use? Is it possible for me to log in and look at it? – if so, you can email me the login details.

                      Alexander

                  Viewing 7 reply threads
                  • You must be logged in to reply to this topic.