PageSourceSearch

https://www.timmins.ca/Common/controls/ContentItemModern/scripts/ContentItemFileProperty.js

js timmins.ca collected 2026-10-02 10:59:41 UTC 38,860 bytes, 891 lines download raw bytes

1var ContentItemFileProps = function (parent, contextId, object, settings) {
2    var commons = new ContentCommon();
3    var res = commons.Resources;
4    var objectId = object.Id;
5    var canCreate = object.canCreate;
6    var canDelete = object.canDelete;
7    var isAdmin = object.isAdmin;
8    var contentItemData;
9    var fileCtrlSel = "#upsertFilePropSection";
10    var saveBtnSel = fileCtrlSel + " .saveFileBtn";
11    var nameSel = fileCtrlSel + " .txtFileName";
12    var descSel = fileCtrlSel + " #txtFileDescription";
13    var closeBtnSel = fileCtrlSel + " .closeFileBtn";
14    var title = res["Edit"];
15    var displayModalWindow;
16    var blnchange = false;
17    var maxSize = settings.maxSize;
18    var exts = settings.allowedExts;
19    var btnAddRevision = $("#btnAddRevision");
20    var btnUpload = fileCtrlSel + " #btnUpload";
21    var currentRevId;
22    var _revisioncurrentPage = 0;
23    var _revisionpagesize = 3;
24    var revisionnoofpagebuttons = 3;
25    var revisionPagerSelector = fileCtrlSel + " #liRevision .PO-paging";
26
27
28    formchange = false;
29    var clearForm = function () {
30        $(nameSel).val("");
31        $('label[for="' + $(nameSel).attr("id") + '"] span.valMsg').show();
32        $(descSel).val("");
33    };
34
35    var setDataInForm = function () {
36        if (objectId > 0) {
37            $.when(contentItemData.GetFileDetail(objectId)).then(function (result) {
38                var resp = result.d;
39                if (resp.RequestStatus != null && resp.RequestStatus.RequestError) {
40                    commons.ShowErrorMessage(resp.RequestStatus.RequestErrorMessage);
41                } else {
42                    resp = result.d.DataObject;
43                    $(nameSel).val(resp.Name);
44                    $('label[for="' + $(nameSel).attr("id") + '"] span.valMsg').hide();
45                    //$(nameSel).next("span").hide();
46                    $(descSel).val(resp.Description);
47                    $(fileCtrlSel + " .CMS_modal-fileTypeIcon").empty();
48                    $(fileCtrlSel + " .CMS_modal-fileTypeIcon").append(commons.GetImageIconAsPerFile(resp.Extension, "content_item", 4));
49                    $(fileCtrlSel + " .sizeValue").empty();
50                    $(fileCtrlSel + " .sizeValue").html(resp.FileSizeString);
51                    $(fileCtrlSel + " .authorValue").empty();
52                    $(fileCtrlSel + " .authorValue").html(resp.CreationUser);
53                    $(fileCtrlSel + " .modifiedDate").empty();
54                    $(fileCtrlSel + " .modifiedDate").html(resp.ModifiedDateString);
55                    $("#txtDragDrop").val("");
56                    btnAddRevision.val("");
57                    currentRevId = resp.LiveRevisionId;
58                    //updateRevisionList(resp);
59                    _revisioncurrentPage = 0;
60                    appendPagerAndData_revision($(fileCtrlSel + " #fieldsetRevision"), resp.Revisions);
61                    if (parent.Access.CanWrite) {
62                        updateMetadata(resp);
63                    }
64                    $(nameSel).focus();
65                    //if (parent.Access.IsAdmin) {
66                    //    setActivity();
67                    //}
68                }
69            });
70        }
71    };
72
73    function bytesToMb(bytes, i) {
74        var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
75        //if (bytes == 0) return '0 Byte';
76        //var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
77        //Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]
78        if (bytes == 0) return '0';
79        return Math.round(bytes / Math.pow(1024, i), 2);
80    };
81    var commentedCode = function () {}
82
83    //Paging
84    //Append Paging and data row
85    var _lastPageRevision;
86    var appendPagerAndData_revision = function (ctrl, data) {
87        SpinnerAlert.show();
88        var pagerCtrl = $(revisionPagerSelector);
89        _lastPageRevision = Math.ceil(data.length / _revisionpagesize);
90        if (_revisioncurrentPage >= _lastPageRevision && _lastPageRevision - 1 >= 0) {
91            _revisioncurrentPage = _lastPageRevision - 1;
92        }
93        updateRevisionList(ctrl, _revisioncurrentPage, data, _revisionpagesize);
94
95        removePager_revision(pagerCtrl);
96        if (data.length > _revisionpagesize) {
97            pagerCtrl.find("ul.PO-pageButton").append(addPageButton_revision(_revisioncurrentPage, _lastPageRevision));
98            updateButton_revision((revisionnoofpagebuttons * Math.floor(_revisioncurrentPage / revisionnoofpagebuttons)) + 1, _lastPageRevision);
99            showPageStatus_revision(_revisioncurrentPage, data, _revisionpagesize);
100            //showCurrentPage_revision();
101            $(revisionPagerSelector + " li a.pageButton").off("click");
102            $(revisionPagerSelector + " li a.pageButton").on("click", function (e) {
103                e.preventDefault();
104                var tag = $(this).attr("tag");
105                if (tag === "-1") {
106                    _revisioncurrentPage -= 1;
107                } else if (tag === "+1") {
108                    if (_revisioncurrentPage < _lastPageRevision - 1)
109                        _revisioncurrentPage += 1;
110                } else {
111                    _revisioncurrentPage = parseInt($(this).attr("tag"));
112                    $(this).focus();
113                }
114                if (_revisioncurrentPage < 0) _revisioncurrentPage = 0;
115
116
117                updateRevisionList(ctrl, _revisioncurrentPage, data, _revisionpagesize);
118                updateButton_revision((revisionnoofpagebuttons * Math.floor(_revisioncurrentPage / revisionnoofpagebuttons)) + 1, _lastPageRevision);
119                //showCurrentPage_revision();
120            });
121            $(revisionPagerSelector + " a.nextPrev").off("click");
122            $(revisionPagerSelector + " a.nextPrev").on("click", function (e) {
123                e.preventDefault();
124                var id = $(this).attr("id");
125                //console.log("... clicked .. " + $(this).attr("tag"));
126                var startPage = parseInt($(this).attr("tag"));
127
128                if (id === "next")
129                    startPage += (revisionnoofpagebuttons);
130                else if (id === "prev")
131                    startPage -= (revisionnoofpagebuttons);
132                if (startPage <= 0) startPage = 1;
133                //showCurrentPage_revision();
134                updateButton_revision(startPage, _lastPageRevision);
135
136            });
137        }
138        SpinnerAlert.hide();
139    };
140    var addPageButton_revision = function (startPage, lastPage) {
141        if (startPage <= 0) startPage = 0;
142        var pagebutton = "";
143        pagebutton += "<li><a href='#' class=\"pageButton\" tag=\"-1\" title=\"" + res["PrevPage"] + "\"><em class=\"fa fa-arrow-left\"></em></a></li>";
144        pagebutton += "<li><a href='#' class=\"nextPrev\" tag=\"" + (startPage + 1) + "\" id=\"prev\" title=\"" + res["PrevPages"] + "\" >...</a></li>";
145        for (var i = 0; i <= revisionnoofpagebuttons - 1; i++) {
146            if (i > lastPage) continue;
147            else {
148                pagebutton += "<li><a href='#' class=\"pageButton number\" tag=\"" + i + "\" title=\"" + (i + 1) + res["Page"] + "\">" + (i + 1) + " </a></li>";
149            }
150        }
151        pagebutton += "<li><a href='#' class=\"nextPrev\" tag=\"" + (startPage + 1) + "\" id=\"next\" title=\"" + res["NextPage"] + "\" >...</a></li>";
152        pagebutton += "<li><a href='#' class=\"pageButton\" tag=\"+1\" title=\"" + res["NextPages"] + "\"><em class=\"fa fa-arrow-right\"></em></a></li>";
153        return pagebutton;
154    };
155    //Show search result status
156    var showPageStatus_revision = function (iPage, data, pagesize) {
157        if (data.length > pagesize)
158            $(revisionPagerSelector + " .PO-pageCount").html(res["PageStatus"].format((iPage + 1), Math.ceil(data.length / pagesize)));
159        else
160            $(revisionPagerSelector + " .PO-pageCount").text("");
161    };
162    //Show current page 
163    var showCurrentPage_revision = function () {
164        $(revisionPagerSelector + " .pageButton").each(function () {
165            var incrementButton = $(this).attr("tag").indexOf("+") < 0 && $(this).attr("tag").indexOf("-") < 0;
166            if (parseInt($(this).attr("tag")) === _revisioncurrentPage && incrementButton) {
167                $(this).addClass("active");
168                //console.log($(this).attr("tag"));
169            } else
170                $(this).removeClass("active");
171        });
172        $(revisionPagerSelector + " .nextPrev").each(function () {
173            $(this).removeClass("active");
174        });
175    };
176    var updateButton_revision = function (startPage, lastPage) {
177        var i = startPage;
178        $(revisionPagerSelector + " a.number").each(function () {
179            if (i <= lastPage) {
180                $(this).show();
181                var tag = $(this).attr("tag");
182                $(this).attr("tag", i - 1);
183                $(this).attr("title", i + res["Page"]);
184                $(this).html(i);
185            } else {
186                $(this).hide();
187            }
188            i += 1;
189        });
190        $(revisionPagerSelector + " a.nextPrev").attr("tag", startPage);
191        if (startPage <= 1) {
192            $(revisionPagerSelector + " li").first().hide();
193            $(revisionPagerSelector + " li").first().next().hide();
194        } else {
195            $(revisionPagerSelector + " li").first().show();
196            $(revisionPagerSelector + " li").first().next().show();
197        }
198        if (i > lastPage) {
199            $(revisionPagerSelector + " li").last().hide();
200            $(revisionPagerSelector + " li").last().prev().hide();
201        } else {
202            $(revisionPagerSelector + " li").last().show();
203            $(revisionPagerSelector + " li").last().prev().show();
204        }
205    };
206    //Remove Pager control
207    var removePager_revision = function (ctrl) {
208        ctrl.find("ul.PO-pageButton li").remove();
209    };
210
211    var multipleSupport = typeof $('<input/>')[0].multiple !== 'undefined';
212    //$(fileCtrlSel + " input[type=file]").customFile();
213
214    //Tabs
215    $(".CMS_modal-tabButtons li").click(function (e) {
216        e.preventDefault();
217        if (!$(this).hasClass("active")) {
218            //var tabNum = $(this).index();
219            var tabNum = $(this).attr("data-index");
220            var nthChild = parseInt(tabNum) + 1;
221            $(fileCtrlSel + " .CMS_modal-tabButtons li.active").first().removeClass("active");
222            $(this).addClass("active");
223            $(fileCtrlSel + " .CMS_modal-tabs li.tab").removeClass("active");
224            $(fileCtrlSel + " .CMS_modal-tabs li.tab:nth-child(" + nthChild + ")").first().addClass("active");
225        }
226    });
227
228    $(fileCtrlSel + " #btnAddRevision").off("change");
229    $(fileCtrlSel + " #btnAddRevision").on("change", function (e) {
230        e.preventDefault();
231        $(btnUpload).trigger("click");
232    });
233    var updateMetadata = function (data) {
234        $("#fieldsetMetadataSimple").empty();
235        $("#fieldsetMetadataSimple").append(data.Metadata);
236        //$("#fieldsetMetadataSimple select").selectBoxIt();
237
238        $("#fieldsetMetadataSimple input[data-type=date]").mask("9999-99-99", {
239            placeholder: "yyyy-mm-dd"
240        });
241        $("#fieldsetMetadataSimple input[data-type=date]").datepicker({
242            dateFormat: 'yy-mm-dd'
243        });
244        $("#fieldsetMetadataSimple input[data-type=timestamp]").mask("99:99", {
245            placeholder: "hh:mm"
246        });
247        $("#fieldsetMetadataSimple input[data-type=date_and_time]").mask("9999-99-99 99:99", {
248            placeholder: "yyyy-mm-dd hh:mm"
249        });
250        $("#fieldsetMetadataSimple input[data-type=time_of_day]").mask("99:99", {
251            placeholder: "hh:mm"
252        });
253
254        $(fileCtrlSel + " .numeric").on('input', function (event) {
255            this.value = this.value.replace(/[^0-9]/g, '');
256        });
257        $(fileCtrlSel + " .numeric").on('blur', function (event) {
258            //var min = $(this).attr("min");
259            //var max = $(this).attr("max");
260            //if (min != undefined && $(this).val() < min)
261            //    $(this).val() = min;
262            //else if (max != undefined && $(this).val() > max)
263            //    $(this).val() = max;
264        });
265        autoComplete();
266    };
267
268    function autoComplete() {
269        $.when(contentItemData.GetUsers()).then(function (result) {
270            var resp = result.d;
271            if (resp.RequestStatus != null && resp.RequestStatus.RequestError) {
272                commons.ShowErrorMessage(resp.RequestStatus.RequestErrorMessage);
273            } else {
274                resp = result.d.DataObject;
275                var suggestions = [];
276                $.each(resp, function (i, val) {
277                    suggestions.push({
278                        label: val.name,
279                        value: val.name,
280                        id: val.id,
281                    });
282                });
283                $("#fieldsetMetadataSimple input[data-type=user]").autocomplete({
284                    minLength: 2,
285                    source: suggestions,
286                    select: function (e, ui) {
287                        //alert(ui.item.value);
288                        $(this).removeAttr("value-id");
289                        $(this).attr("value-id", ui.item.id);
290                        //alert($(this).attr("value-id"));
291                    }
292                });
293            }
294        });
295    };
296    var updateRevisionList = function (ctrl, iPage, data, pagesize) {
297        SpinnerAlert.show();
298        var objParams = jQuery.parseJSON(parent.Params);
299        var revisionList = $(fileCtrlSel + " tbody.ulRevisionList");
300        var endCount = ((iPage * pagesize) + pagesize) - 1;
301        if (data.length < endCount) {
302            endCount = data.length;
303        }
304        revisionList.empty();
305        var trCtrl = "<tr data-id=\"{{RevisionId}}\">" +
306            "<td scope=\"row\" title=\"{{Title}}\">{{Title}}</td>" +
307            "<td >{{FileSizeString}}</td>" +
308            "<td >{{CreationUser}}</td>" +
309            "<td >{{ModifiedDateString}}</td>" +
310            "<td >{{Version}}</td>" +
311            "<td >{{actions}}</td>" +
312            "</tr>";
313        var delCtrl = "<a href=\"\" class=\"delRevision CMS_modal
313-actionButton delete\" title=\"Delete revision\" >" + res["Delete"] + "</a>";
314        var makeLiveCtrl = "<a class=\"makeLive CMS_modal-actionButton active\" href=\"\" title=\"Make Live revision\" >" + res["MakeLive"] + "</a>";
315        $.each(data, function (index, value) {
316            if (index >= iPage * pagesize && index <= endCount) {
317                var fileName = value.Title + "." + value.Extension;
318                var dataTr = trCtrl.replace("{{Title}}", fileName).replace("{{Title}}", fileName.length > 15 ? fileName.substring(0, 15) + "..." : fileName).replace("{{RevisionId}}", value.LiveRevisionId).replace("{{FileSizeString}}", value.FileSizeString).replace("{{ModifiedDateString}}", value.ModifiedDateString).replace("{{CreationUser}}", value.CreationUser).replace("{{Version}}", value.Version);
319
320                if (currentRevId != value.LiveRevisionId) {
321                    if (value.isAdmin && value.isAdmin == true)
322                        dataTr = dataTr.replace("{{actions}}", makeLiveCtrl + delCtrl);
323                    else if ((value.canDelete && value.canDelete == true) || objParams["id"] == value.CreationUserId) {
324                        dataTr = dataTr.replace("{{actions}}", delCtrl);
325                    } else {
326                        dataTr = dataTr.replace("{{actions}}", "");
327                    }
328                } else {
329                    dataTr = dataTr.replace("{{actions}}", res["LiveVersion"]);
330                }
331                revisionList.append(dataTr);
332            }
333        });
334        showPageStatus_revision(iPage, data, pagesize);
335
336        $(fileCtrlSel + " a.makeLive").off("click");
337        $(fileCtrlSel + " a.makeLive").on("click", function (e) {
338            e.stopPropagation();
339            e.preventDefault();
340            var parentLi = $(this).closest("tr");
341            var dataId = parseInt(parentLi.attr("data-id"));
342            if (objectId > 0 && dataId > 0) {
343                $.when(contentItemData.MakeLive(dataId, objectId, contextId)).then(function (result) {
344                    var resp = result.d;
345                    if (resp.RequestStatus != null && resp.RequestStatus.RequestError) {
346                        commons.ShowErrorMessage("Invalid operation!");
347                    } else {
348                        commons.ShowCreateMessage("File is live version now.");
349                        initialise();
350                        blnchange = true;
351                    }
352                });
353            }
354        });
355
356        $(fileCtrlSel + " a.delRevision").off("click");
357        $(fileCtrlSel + " a.delRevision").on("click", function (e) {
358            e.stopPropagation();
359            e.preventDefault();
360            var parentLi = $(this).closest("tr");
361            var dataId = parseInt(parentLi.attr("data-id"));
362            var revName = parentLi.find("td").first().attr("title");
363            swal({
364                title: "Are you sure",
365                text: 'You want to delete revision "' + revName + '" ?',
366                type: "warning",
367                showCancelButton: true,
368                confirmButtonColor: "#DD6B55",
369                confirmButtonText: "Yes, delete it!",
370                closeOnConfirm: true
371            }).then(function (isConfirm) {
372                if (isConfirm) {
373                    if (objectId > 0 && dataId > 0) {
374                        $.when(contentItemData.DeleteRevision(dataId, objectId, contextId)).then(function (result) {
375                            var resp = result.d;
376                            if (resp.RequestStatus != null && resp.RequestStatus.RequestError) {
377                                commons.ShowErrorMessage("Invalid operation!");
378                            } else {
379                                commons.ShowDeleteMessage("File revision \"" + revName + "\" is deleted successfully.");
380                                initialise();
381                            }
382                        });
383                    }
384                }
385            }).catch(function () {});
386        });
387        SpinnerAlert.hide();
388    };
389    var convertSize = function (size) {
390        var sizeKB = size / 1024;
391        if (parseInt(sizeKB) > 1024) {
392            var sizeMB = sizeKB / 1024;
393            sizeStr = sizeMB.toFixed(2) + " MB";
394        } else {
395            sizeStr = sizeKB.toFixed(2) + " KB";
396        }
397        return sizeStr;
398    };
399    var fileUploadObject;
400    //Initialisation of an object
401    var initialise = function () {
402        var parentWidth = $(".PO-wrapper").width();
403        if (!(object.canCreate && object.canCreate == "true")) {
404            $(fileCtrlSel + " div#customfileupload").remove();
405        }
406        //if (!parent.Access.IsAdmin) {
407        $(fileCtrlSel + " .CMS_modal-tabButtons li.activity").remove();
408        $(fileCtrlSel + " .CMS_modal-tabs li.activity").remove();
409        //}
410
411        contentItemData = new ContentItemData(contextId);
412        displayModalWindow = new ContentItemModalWindow(contextId);
413        commons.ShowBreadCrumbs(parent, fileCtrlSel);
414        if (objectId > 0) {
415            title = res["Edit"];
416            $(saveBtnSel).val(res["Update"] + " " + res["file"].Propercase());
417            if (parentWidth >= 525) {
418                displayModalWindow.openModalWindow(fileCtrlSel, "updateFileSection", title, 750, 750, null, true, true, parent, this);
419            } else {
420                displayModalWindow.openModalWindow(fileCtrlSel, "updateFileSection", title, parentWidth, 750, null, true, true, parent, this);
421            }
422
423            commons.displayModalWindow = displayModalWindow;
424            if (objectId > 0) {
425                setDataInForm();
426            } else {
427                clearForm();
428            }
429        }
430        return false;
431    };
432
433
434    var saveMetadata = function () {
435        var attrInputs = $("#fieldsetMetadataSimple input");
436        var metadataAttr = [];
437        $("#fieldsetMetadataSimple input").each(function () {
438            var dataId = $(this).attr("data-id").toString();
439            var dataType = $(this).attr("data-type");
440            var dataVal;
441            switch (dataType) {
442                case "user":
443                    dataVal = $(this).attr("value-id");
444                    break;
445                case "time_of_day":
446                    if ($(this).val() != "")
447                        dataVal = $(this).val().trim();
448                    else
449                        dataVal = "00:00";
450                    break;
451                case "date":
452                case "date_and_time":
453                    //dataVal = $(this).datepicker("yy-mm-dd").val();
454                    if ($(this).val() != "")
455                        dataVal = $(this).val().trim();
456                    else
457                        dataVal = "";
458                    break;
459                case "string":
460                case "number":
461                case "url":
462                case "timestamp":
463                default:
464                    dataVal = $(this).val().trim();
465                    break;
466            }
467            metadataAttr.push(dataId + ":::" + dataVal);
468        });
469        $("#fieldsetMetadataSimple textarea").each(function () {
470            var dataId = $(this).attr("data-id").toString();
471            var dataType = $(this).attr("data-type");
472            var dataVal;
473            switch (dataType) {
474                case "multiline_string":
475                case "memo":
476                case "html_memo":
477                case "richtext":
478                case "content":
479                default:
480                    dataVal = $(this).val().trim();
481                    break;
482            }
483            metadataAttr.push(dataId + ":::" + dataVal);
484        });
485        return metadataAttr;
486
487    }
488
489    if (object.canCreate && object.canCreate == "true") {
490        var sendFileToServer = function (formData, status) {
491            SpinnerAlert.show();
492            var uploadURL = "/Common/controls/multipleFileUpload/plupload/fileUploadHandler"; //Upload URL
493            var extraData = {}; //Extra Data.
494            var jqXHR = $.ajax({
495                xhr: function () {
496                    var xhrobj = $.ajaxSettings.xhr();
497                    if (xhrobj.upload) {
498                        xhrobj.upload.addEventListener('progress', function (event) {
499                            var percent = 0;
500                            var position = event.loaded || event.position;
501                            var total = event.total;
502                            if (event.lengthComputable) {
503                                percent = Math.ceil(position / total * 100);
504                            }
505                            //status.setProgress(percent);
506                        }, false);
507                    }
508                    return xhrobj;
509                },
510                url: uploadURL,
511                type: "POST",
512                contentType: false,
513                processData: false,
514                cache: false,
515                data: formData,
516                success: function (data) {
517                    SpinnerAlert.hide();
518                    btnAddRevision.val("");
519                    //status.setProgress(100);       
520                    $("#status1").empty();
521                    $("#status1").attr("style", "color:#27ae60;");
522                    var fileName = "";
523                    try {
524                        fileName = " [" + formData.get("file").name + "]";
525                    } catch (exInn) {;
526                    }
527                    $("#status1").append(res["RevisionAddded"] + "{0}".format(fileName));
528                    commons.ShowCreateMessage(res["RevisionAddded"] + "{0}".format(fileName));
529                    initialise();
530                    blnchange = true;
531                },
532                error: function (xhr, ajaxOptions, thrownError) {
533                    SpinnerAlert.hide();
534                    if (xhr.responseJSON) {
535                        $("#status1").empty();
536                        $("#status1").removeAttr("style");
537                        $("#status1").append(xhr.responseJSON.message);
538                    }
539                },
540
541            });
542
543            //status.setAbort(jqXHR);
544        };
545        var ieFormData = function ieFormData() {
546            if (window.FormData == undefined) {
547                this.processData = true;
548                this.contentType = 'application/x-www-form-urlencoded';
549                this.append = function (name, value) {
550                    this[name] = value == undefined ? "" : value;
551                    return true;
552                }
553            } else {
554                var formdata = new FormData();
555                formdata.processData = false;
556                formdata.contentType = false;
557                return formdata;
558            }
559        };
560        var rowCount = 0;
561        var createStatusbar = function (obj) {
562            rowCount++;
563            this.statusbar = $("<div class='statusbar'></div>");
564            obj.before(this.statusbar);
565        };
566        var handleFileUpload = function (files, obj) {
567            var i = 0;
568            var fd = ieFormData();
569            if (files[i] != undefined) {
570                fd.append('file', files[i]);
571                fd.append("objectType", "content_item");
572                fd.append("parentId", contextId);
573                fd.append("isrevision", true);
574                fd.append("objectid", objectId);
575                if (multipleSupport && files[i] && files[i].size <= 0) {
576                    $("#status1").empty();
577                    $("#status1").removeAttr("style");
578                    $("#status1").append("The file '" + files[i].name + "' is invali
578d. (" + files[i].name + " has no data)");
579                } else {
580                    var status = new createStatusbar(obj); //Using this we can set progress.
581                    sendFileToServer(fd, status);
582                }
583            }
584        };
585        var dragandrophandler = $(fileCtrlSel + " #dragandrophandler");
586        var txtDragDrophandler = $(fileCtrlSel + " #txtDragDrop");
587        dragandrophandler.off('dragenter');
588        dragandrophandler.on('dragenter', function (e) {
589            e.stopPropagation();
590            e.preventDefault();
591            $(this).css('border', '2px solid #0B85A1');
592        });
593        dragandrophandler.off('dragover');
594        dragandrophandler.on('dragover', function (e) {
595            e.stopPropagation();
596            e.preventDefault();
597        });
598        dragandrophandler.off('drop');
599        dragandrophandler.on('drop', function (e) {
600            $(this).css('border', '2px dotted #0B85A1');
601            e.preventDefault();
602            var files = e.originalEvent.dataTransfer.files;
603            if (files != undefined && files.length > 0) {
604                $("#txtDragDrop").val(files[0].name + ' (' + plupload.formatSize(files[0].size) + ')');
605                //We need to send dropped files to Server
606                handleFileUpload(files, dragandrophandler);
607            } else {
608                commons.ShowErrorMessage(res["DragDropError"]);
609            }
610        });
611
612        $(document).off('dragenter');
613        $(document).on('dragenter', function (e) {
614            e.stopPropagation();
615            e.preventDefault();
616        });
617        $(document).off('dragover');
618        $(document).on('dragover', function (e) {
619
620            e.stopPropagation();
621            e.preventDefault();
622            if (dragandrophandler)
623                dragandrophandler.css('border', '2px dotted #0B85A1');
624        });
625        $(document).off('drop');
626        $(document).on('drop', function (e) {
627            e.stopPropagation();
628            e.preventDefault();
629        });
630
631        var imageSizes = {
632            thumbnail: {
633                width: 400,
634                height: 400
635            }, //The thumbail images in the updated photo gallery portlet.
636            medium: {
637                width: 1000,
638                height: 800
639            }, //This size is not used in the updated photo gallery portlet.
640            large: {
641                width: 1000,
642                height: 800
643            } //The slideshow and lightbox images for updated photo gallery portlet.
644        }
645        var filters = [{
646            title: "Custom Filter",
647            extensions: exts
648        }];
649        var uploader = new plupload.Uploader({
650            runtimes: 'html5,flash,silverlight,html4',
651            browse_button: "btnAddFile", // you can pass in id...
652            container: document.getElementById("dragandrophandler"), // ... or DOM Element itself
653            max_file_size: bytesToMb(maxSize * 1024, 2) + "mb",
654            chunk_size: 0,
655            min_file_size: "1kb",
656            multi_selection: false,
657            unique_names: false,
658            // Specify what files to browse for
659            filters: filters,
660            send_file_name: true,
661            url: "/Common/controls/multipleFileUpload/plupload/fileUploadHandler",
662            max_file_count: 1,
663            flash_swf_url: '/Common/resources/shared/controls/plupload/Moxie.swf',
664            silverlight_xap_url: '/Common/resources/shared/controls/plUpload/Moxie.xap',
665            multipart_params: {
666                "parentId": contextId,
667                "objectType": "content_item",
668                "isrevision": true,
669                "objectid": objectId
670            },
671            init: {
672                PostInit: function () {
673                    $("#status1").innerHTML = '';
674                },
675                BeforeUpload: function (up, file) {
676                    file.originalName = file.name;
677                    file.name = getTimestamp() + "_" + file.name; //Chunked (large) images use the file.name property; small images do not, and have to have name made unique on server side. 
678                },
679                FilesAdded: function (up, files) {
680                    SpinnerAlert.show();
681                    plupload.each(files, function (file) {
682                        if (multipleSupport && file && file.size <= 0) {
683                            $("#status1").empty();
684                            $("#status1").removeAttr("style");
685                            $("#status1").append("The file '" + file._orgName + "' is invali
685d. (" + file.originalName + " has no data)");
686                        } else {
687                            $("#txtDragDrop").val(file.originalName + ' (' + plupload.formatSize(file.size) + ')');
688                            uploader.start();
689                        }
690                    });
691
692                },
693                FileUploaded: function (up, file, response) {
694                    SpinnerAlert.hide();
695                    btnAddRevision.val("");
696                    $("#status1").empty();
697                    $("#status1").attr("style", "color:#27ae60;");
698                    $("#status1").append(res["RevisionAddded"] + " [" + file.originalName + "]");
699                    commons.ShowCreateMessage(res["RevisionAddded"] + " [" + file.originalName + "]");
700                    initialise();
701                    blnchange = true;
702                },
703                Error: function (up, err) {
704                    SpinnerAlert.hide();
705                    var erObj = jQuery.parseJSON(err.response);
706                    $("#status1").empty();
707                    $("#status1").removeAttr("style");
708                    if (erObj || err.code == -601 || err.code == -600) {
709                        if (err.code == -601)
710                            $("#status1").append("The file '" + ((err && err.file) ? err.file.originalName : "") + "' has a file extension which is not permitted.");
711                        else
712                            $("#status1").append(erObj.message);
713                    } else $("#status1").append(err.message);
714                    return false;
715                }
716            }
717        });
718
719
720        uploader.init();
721    }
722
723
724
725    //Validations for required controls
726    $(fileCtrlSel + " .required").off('blur');
727    $(fileCtrlSel + " .required").on('blur', function () {
728        var $thisLabel = $('label[for="' + $(this).attr("id") + '"] span.valMsg');
729        if ($(this).val() == null || $(this).val().trim().length <= 0) {
730            $thisLabel.show();
731            return false;
732        } else {
733            $thisLabel.hide();
734            formchange = true;
735        }
736    });
737    $(fileCtrlSel + " .required").off('change');
738    $(fileCtrlSel + " .required").on('change', function () {
739        var $thisLabel = $('label[for="' + $(this).attr("id") + '"] span.valMsg');
740        formchange = true;
741        if ($(this).val().trim().length > 0)
742            $thisLabel.hide();
743    });
744    $(fileCtrlSel + " .required").off('keydown');
745    $(fileCtrlSel + " .required").on('keydown', function () {
746        var $thisLabel = $('label[for="' + $(this).attr("id") + '"] span.valMsg');
747        if ($(this).val().trim().length > 0)
748            $thisLabel.hide();
749    });
750    //$(nameSel + "," + descSel).off("keyup");
751    //$(nameSel + "," + descSel).on("keyup", function (event) {
752    //    if (event.keyCode == 13) {
753    //        $(saveBtnSel).trigger("click");
754    //    }
755    //});
756    //Save button event
757    $(saveBtnSel).off("click");
758    $(saveBtnSel).on("click", function (e) {
759        e.preventDefault();
760        var metadataAttr = saveMetadata();
761        var fileObject = {
762            "Name": $(nameSel).val().trim(),
763            "Description": $(descSel).val().trim(),
764            "ParentId": contextId,
765            "ObjectId": objectId,
766            "Metadata": metadataAttr
767        };
768        if (objectId <= 0) {
769            commons.ShowErrorMessage(res["Invalid"]);
770        } else if (fileObject.Name.trim().length <= 0) {
771            //commons.ShowValidationMessage(res["EmptyValidation"].format(res["Name"]));
772            $(nameSel).focus();
773            $('label[for="' + $(nameSel).attr("id") + '"] span.valMsg').show();
774        } else if (fileObject.Name.trim().length > 0) {
775            $.when(contentItemData.UpsertFile(fileObject)).then(function (result) {
776                var resp = result.d;
777                if (resp.RequestStatus != null && resp.RequestStatus.RequestError) {
778                    commons.ShowErrorMessage(resp.RequestStatus.RequestErrorMessage);
779                } else {
780                    commons.ShowUpdateMessage(res["updated"].format(fileObject.Name, res["file"]));
781                    if (displayModalWindow) {
782                        displayModalWindow.closeModalWindow();
783                    }
784                    parent.initialise();
785                }
786            });
787        }
788        return false;
789    });
790
791
792    //Close button event
793    $(closeBtnSel).off("click");
794    $(closeBtnSel).on("click", function (e) {
795        e.preventDefault();
796        //$("#fieldsetMetadataSimple input[data-type=user]").autocomplete("destroy");
797        displayModalWindow.closeModalWindow();
798        purge(this);
799        if (blnchange)
800            parent.initialise();
801        return false;
802    });
803
804    var distroy = function () {
805        if (uploader != undefined)
806            uploader.destroy();
807        purge(this);
808    };
809
810    var purge = function purge(obj) {
811        var att = obj.attributes,
812            ind, len, nam;
813        if (att) {
814            for (ind = att.length - 1; ind >= 0; ind -= 1) {
815                nam = att[ind].name;
816                if (typeof obj[nam] === 'function') {
817                    obj[nam] = null;
818                }
819            }
820        }
821        att = obj.childNodes;
822        if (att) {
823            len = att.length;
824            for (ind = 0; ind < len; ind += 1) {
825                purge(obj.childNodes[ind]);
826            }
827        }
828    }
829
830    //Delete File
831    var deleteFile = function (fileName) {
832        swal({
833            title: "Are you sure",
834            text: 'You want to delete file "' + fileName + '" ?',
835            type: "warning",
836            showCancelButton: true,
837            confirmButtonColor: "#DD6B55",
838            confirmButtonText: "Yes, delete it!",
839            closeOnConfirm: true
840        }).then(function (isConfirm) {
841            if (isConfirm) {
842                contentItemData = new ContentItemData(contextId);
843                if (objectId > 0) {
844                    $.when(contentItemData.DeleteFile(objectId)).then(function (result) {
845                        var resp = result.d;
846                        if (resp.RequestStatus != null && resp.RequestStatus.RequestError) {
847                            commons.ShowErrorMessage("Invalid operation!");
848                        } else {
849                            commons.ShowDeleteMessage('"' + fileName + '" file has been deleted.')
850                            parent.initialise();
851                        }
852                    });
853                }
854            }
855        }).catch(function () {});
856
857        return false;
858    };
859
860    var getTimestamp = function () {
861        var d = new Date();
862        var theYear = String(d.getFullYear());
863        var theMonth = String(d.getMonth() + 1);
864        var theDay = String(d.getDate());
865        var theHour = String(d.getHours());
866        var theMin = String(d.getMinutes());
867        var theSec = String(d.getSeconds());
868        var theMS = String(d.getMilliseconds());
869
870        theMonth = zeroPad(theMonth);
871        theDay = zeroPad(theDay);
872        theHour = zeroPad(theHour);
873        theMin = zeroPad(theMin);
874        theSec = zeroPad(theSec);
875
876        return theYear + theMonth + theDay + theHour + theMin + theSec + theMS;
877    };
878
879    var zeroPad = function (text) {
880        if (text.length == 1) {
881            return "0" + text
882        };
883        return text;
884    }
885
886    return {
887        initialise: initialise,
888        DeleteFile: deleteFile,
889        Distroy: distroy
890    }
891};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.