瀏覽代碼

Note backup before pure SOAP version

Vijayakrishnan 3 年之前
父節點
當前提交
062ac290ea
共有 1 個文件被更改,包括 609 次插入0 次删除
  1. 609 0
      resources/views/app/patient/note/dashboard_script-bu-b4-oure-soap.blade.php

+ 609 - 0
resources/views/app/patient/note/dashboard_script-bu-b4-oure-soap.blade.php

@@ -0,0 +1,609 @@
+<script>
+        (function() {
+
+            let numSectionsPendingInitialization = 0;
+
+            function init() {
+
+                // on note-section hover, highlight the according left-tree node(s)
+                $(document)
+                    .off('mouseenter', '.note-section')
+                    .on('mouseenter', '.note-section', function(){
+                        $('.note-tree-node').removeClass('hovered');
+                        let target = $('.note-tree-node a[data-segment-uid="' + $(this).attr('data-segment-uid') + '"]');
+                        target.parent().addClass('hovered');
+                        target.parent().parents('.note-tree-node').addClass('hovered');
+                        return false;
+                    });
+
+                $(document)
+                    .off('mouseenter', '[data-non-segment-section]')
+                    .on('mouseenter', '[data-non-segment-section]', function(){
+                        $('.note-tree-node').removeClass('hovered');
+                        let target = $('.note-tree-node a[data-non-segment-target="' + $(this).attr('data-non-segment-section') + '"]');
+                        target.parent().addClass('hovered');
+                        target.parent().parents('.note-tree-node').addClass('hovered');
+                        return false;
+                    });
+
+                $(document)
+                    .off('mouseleave', '.note-section')
+                    .on('mouseleave', '.note-section', () => {
+                        $('.note-tree-node').removeClass('hovered');
+                        return false;
+                    });
+
+                // print note
+                $(document)
+                    .off('click.print', '.print-note')
+                    .on('click.print', '.print-note', () => {
+                        window.print();
+                        return false;
+                    });
+                $('.print-note').removeClass('invisible');
+
+                $('.note-method-select').change(function() {
+                    let form = $(this).closest('form');
+                    if(this.value === 'IN_CLINIC') {
+                        form.find('.if-in-clinic').show();
+                    }
+                    else {
+                        form.find('.if-in-clinic').hide();
+                    }
+                });
+
+                $('.note-method-select').each(function() {
+                    let form = $(this).closest('form');
+                    if(this.value === 'IN_CLINIC') {
+                        form.find('.if-in-clinic').show();
+                    }
+                    else {
+                        form.find('.if-in-clinic').hide();
+                    }
+                });
+
+                $('textarea[rte]').each(function() {
+
+                    $(this).wrap(
+                        $('<div class="border-left border-right rte-holder"/>')
+                            .attr('data-shortcuts', '')
+                    );
+
+                    // give a unique id to this editor instance
+                    var editorID = Math.ceil(Math.random() * 99999),
+                        fieldName = this.name;
+
+                    var ti = $('<input type="hidden" />')
+                        .val(this.value)
+                        .attr('name', this.name)
+                        .insertBefore(this);
+                    var ce = $('<div data-editor-id="' + editorID + '" data-field="' + this.name + '"/>')
+                        .html(this.value)
+                        .insertBefore(this);
+                    $(this).remove();
+
+                    var qe = new Quill('[data-editor-id="' + editorID + '"]', {
+                        theme: 'snow',
+                        modules: stagQuillConfig
+                    });
+                    var toolbar = $(qe.container).prev('.ql-toolbar');
+
+                    // add button for new shortcut
+                    var newSCButton = $('<button class="btn bg-white btn-sm btn-default text-primary w-auto px-2 border py-0 ' +
+                        'text-sm add-shortcut" data-editor-id="' + editorID + '">+ Shortcut</button>');
+                    toolbar.append(newSCButton);
+
+                    qe.on('text-change', function() {
+                        ti.val(qe.root.innerHTML);
+                    });
+
+                    $(qe.container)
+                        .find('.ql-editor[contenteditable]')
+                            .attr('data-field', fieldName)
+                            .attr('data-editor-id', editorID)
+                            .attr('with-shortcuts', 1);
+
+                });
+
+                $(document)
+                    .off('click.edit-trigger', '.edit-trigger:not(.edit)')
+                    .on('click.edit-trigger', '.edit-trigger:not(.edit)', function() {
+
+                        if($('.note-section>.stag-popup:visible').length) return;
+
+                        let editParent = $(this).closest('.note-section');
+
+                        // TEMP: disable edit mode for medrisk_vigilance
+                        // TODO: do this in the proper place
+                        if(editParent.is('[data-segment-template-name="medrisk_vigilence"]')) return false;
+
+                        // TEMP: show wizard for allergies, rx, dx, goals
+                        if(editParent.is('[data-segment-template-name="plan_allergies"]') ||
+                            editParent.is('[data-segment-template-name="intake_allergies"]')) {
+                            $('.note-bottom-toolbar .allergies-center-trigger').trigger('click');
+                            return false;
+                        }
+                        else if(editParent.is('[data-segment-template-name="plan_problems"]') ||
+                            editParent.is('[data-segment-template-name="intake_problems"]')) {
+                            $('.note-bottom-toolbar .problems-center-trigger').trigger('click');
+                            return false;
+                        }
+                        else if(editParent.is('[data-segment-template-name="plan_medications"]') ||
+                            editParent.is('[data-segment-template-name="intake_medications"]')) {
+                            $('.note-bottom-toolbar .medications-center-trigger').trigger('click');
+                            return false;
+                        }
+                        else if(editParent.is('[data-segment-template-name="plan_goals"]') ||
+                            editParent.is('[data-segment-template-name="intake_goals"]')) {
+                            $('.note-bottom-toolbar .goals-center-trigger').trigger('click');
+                            return false;
+                        }
+                        else if(editParent.is('[data-segment-template-name="plan_care_team"]') ||
+                            editParent.is('[data-segment-template-name="intake_care_team"]')) {
+                            $('.note-bottom-toolbar .careteam-center-trigger').trigger('click');
+                            return false;
+                        }
+                        else if(editParent.is('[data-segment-template-name="plan_supplements"]') ||
+                            editParent.is('[data-segment-template-name="intake_supplements"]')) {
+                            $('.note-bottom-toolbar .supplements-center-trigger').trigger('click');
+                            return false;
+                        }
+
+                        // TEMP: open in popup if LS segment
+                        if(editParent.is('[data-segment-template-name^="lifestyle_"]')) {
+                            showStagPopup('segment-popup-' + editParent.attr('data-segment-template-name'), true);
+                            return false;
+                        }
+
+                        if(editParent.is('[data-segment-template-name="plan_nutrition"]') ||
+                            editParent.is('[data-segment-template-name="intake_nutrition"]')) {
+                            openDynamicStagPopup('/nutrition-center/{{$note->client->uid}}/{{$note->uid}}',
+                                'nutrition-center-{{$note->id}}',
+                                '<img src="/img/nutrition-rx.png" class=""/> Nutrition Rx',
+                                false,
+                                "medium-large overflow-visible");
+                            return false;
+                        }
+
+                        if(editParent.is('[data-segment-template-name="plan_exercise"]') ||
+                            editParent.is('[data-segment-template-name="intake_exercise"]')) {
+                            openDynamicStagPopup('/exercise-center/{{$note->client->uid}}/{{$note->uid}}',
+                                'exercise-center-{{$note->id}}',
+                                '<img src="/img/exercise-rx.png" class=""/> Exercise Rx',
+                                false,
+                                "medium-large overflow-visible");
+                            return false;
+                        }
+
+                        if(editParent.is('[data-segment-template-name="plan_behavior"]') ||
+                            editParent.is('[data-segment-template-name="intake_behavior"]')) {
+                            openDynamicStagPopup('/behavior-center/{{$note->client->uid}}/{{$note->uid}}',
+                                'behavior-center-{{$note->id}}',
+                                '<img src="/img/behavior-rx.png" class=""/> Behavior Rx',
+                                false,
+                                "medium-large overflow-visible");
+                            return false;
+                        }
+
+                        <?php
+                        $rosSegment = $note->getSegmentByInternalName('ros');
+                        ?>
+                        @if($rosSegment)
+                        if(editParent.is('[data-segment-template-name="ros"]')) {
+                            openDynamicStagPopup('/note-segment-view/{{$note->client->uid}}/{{$note->uid}}/{{$rosSegment->uid}}/ros/edit',
+                                'init-ros-{{$note->id}}',
+                                'Review of Systems',
+                                false,
+                                "medium-large overflow-visible");
+                            return false;
+                        }
+                        @endif
+
+                        // OPEN popup for if note-segment-view exists
+                        if($('.' + editParent.attr('data-segment-template-name') + '-trigger').length) {
+                            $('.' + editParent.attr('data-segment-template-name') + '-trigger').trigger('click');
+                            return false;
+                        }
+
+                        if(editParent.is('.edit')) {
+                            editParent.removeClass('edit');
+                        }
+                        else {
+                            let docRoot = $('html');
+                            let prevEffectiveTop = editParent.offset().top - docRoot.scrollTop();
+                            $('.note-section.edit').removeClass('edit');
+                            editParent.addClass('edit');
+                            let newEffectiveTop = editParent.offset().top - docRoot.scrollTop();
+                            if(newEffectiveTop < prevEffectiveTop) {
+                                docRoot.scrollTop(docRoot.scrollTop() - (prevEffectiveTop - newEffectiveTop));
+                            }
+                        }
+
+                        let visitTreeLink = $('.note-tree-node a[data-segment-internal-name="' + editParent.attr('data-segment-template-name') + '"]');
+                        if(visitTreeLink.length) {
+                            $('.note-tree-node.active').removeClass('active');
+                            visitTreeLink.closest('.note-tree-node').addClass('active');
+                        }
+
+                        return false;
+                    });
+
+                $('.note-templates-trigger')
+                    .off('click.note-templates-trigger')
+                    .on('click.note-templates-trigger', function() {
+                        $('.note-templates-underlay').show();
+                        let container = $(this).closest('.note-section').find('.note-template-container');
+                        container.find('.note-template-children').hide();
+                        container.find('.note-template-item.selected').removeClass('selected');
+                        container.find('.note-template-item[prefix]').removeAttr('prefix');
+                        container.find('input[type="checkbox"]').prop('checked', false);
+                        container.find('.note-template-output-text').empty();
+                        container.show();
+                        loadTemplateSet(container.find('.note-template-set-chooser'));
+                        loadExamTemplateSet(container.find('.note-exam-template-set-chooser'),
+                            container.find('.note-exam-exam-chooser').val(),
+                            container.find('.note-exam-template-set-chooser').val());
+                        return false;
+                    });
+
+                $(document)
+                    .off('click.note-templates-trigger-assessment', '.note-templates-trigger-assessment')
+                    .on('click.note-templates-trigger-assessment', '.note-templates-trigger-assessment', function() {
+                        $('.note-templates-underlay').show();
+                        let container = $(this).closest('.note-section').find('.note-template-container');
+                        container.find('.note-template-children').hide();
+                        container.find('.note-template-item.selected').removeClass('selected');
+                        container.find('.note-template-item[prefix]').removeAttr('prefix');
+                        container.find('input[type="checkbox"]').prop('checked', false);
+                        container.find('.note-template-output-text').empty();
+                        container.attr('data-editor-id', $(this).attr('data-editor-id'));
+                        container.show();
+                        container.css({
+                            left: ($(this).position().left - 140) + 'px',
+                            top: ($(this).position().top + 22) + 'px',
+                        });
+                        loadTemplateSet(container.find('.note-template-set-chooser'));
+                        loadExamTemplateSet(container.find('.note-exam-template-set-chooser'),
+                            container.find('.note-exam-exam-chooser').val(),
+                            container.find('.note-exam-template-set-chooser').val());
+                        return false;
+                    });
+
+                $(document)
+                    .off('click.note-templates-underlay', '.note-templates-underlay, .note-template-close-trigger')
+                    .on('click.note-templates-underlay', '.note-templates-underlay, .note-template-close-trigger', function() {
+                        $('.note-templates-underlay').hide();
+                         $('.note-template-container').hide();
+                    });
+
+                $(document)
+                    .off('click.note-template-label', '.note-template-item .label')
+                    .on('click.note-template-label', '.note-template-item .label', function() {
+                        let item = $(this).closest('.note-template-item');
+                        let isChecked = $(this).find('>input[type="checkbox"]').prop('checked');
+                        let hasChildren = !!item.find('>.note-template-children').length,
+                            childrenShown = item.find('>.note-template-children:visible').length;
+
+                        if(isChecked && hasChildren && !childrenShown) { // just show
+                            $('.note-template-children').hide();
+                            $(this).parents('.note-template-children').show();
+                            item.find('>.note-template-children').show()
+                                .find('>textarea,>input[type="number"],>input[type="date"]').first().focus();
+                            return false;
+                        }
+
+                        $(this).find('>input[type="checkbox"]').prop('checked', !isChecked);
+                        isChecked = !isChecked;
+                        if(isChecked) {
+                            item.addClass('selected');
+                        }
+                        else {
+                            item.removeClass('selected');
+                        }
+                        $('.note-template-children').hide();
+                        $(this).parents('.note-template-children').show();
+                        if(isChecked) {
+                            item.find('>.note-template-children')
+                                .show()
+                                .find('>textarea,>input[type="number"],>input[type="date"]')
+                                .first().focus();
+                        }
+
+                        generateTemplateOutput();
+
+                        return false;
+                    });
+
+                $(document)
+                    .off('mousedown.note-templates-apply', '.note-template-apply-trigger')
+                    .on('mousedown.note-templates-apply', '.note-template-apply-trigger', function() {
+                        let templateContainer = $('.note-template-container:visible').first();
+                        let result = $('.note-template-output-text:visible').first().html();
+                        $('.note-templates-underlay').hide();
+                        $('.note-template-container').hide();
+                        let editor = null;
+                        if($(this).closest('.assessment-detail-template').length) {
+                            editor  = $('.ql-editor[data-editor-id="' + templateContainer.attr('data-editor-id') + '"]:visible').first();
+                        }
+                        else {
+                            editor  = $('.ql-editor[contenteditable]:visible').first();
+                        }
+                        if(editor && editor.length) {
+                            result = $.trim(editor.text() !== '' ? editor.html() : '') + result;
+                            editor.html(result).focus();
+                        }
+                        return false;
+                    });
+
+                $(document)
+                    .off('input paste change', '.note-template-item textarea, .note-template-item input[type="number"], .note-template-item input[type="date"]')
+                    .on('input paste change', '.note-template-item textarea, .note-template-item input[type="number"], .note-template-item input[type="date"]', function() {
+                        generateTemplateOutput();
+                    });
+
+                $(document)
+                    .off('click.plus-trigger', '.note-template-item .plus-trigger')
+                    .on('click.plus-trigger', '.note-template-item .plus-trigger', function() {
+                        let item = $(this).closest('.note-template-item');
+                        if(item.attr('prefix') === '(+)') {
+                            item.removeAttr('prefix');
+                            item.find('>.note-template-text>.label>input[type="checkbox"]').prop('checked', false);
+                            item.removeClass('selected');
+                        }
+                        else {
+                            item.attr('prefix', '(+)');
+                            item.find('>.note-template-text>.label>input[type="checkbox"]').prop('checked', true);
+                            item.addClass('selected');
+                        }
+                        generateTemplateOutput();
+                        return false;
+                    });
+
+                $(document)
+                    .off('click.minus-trigger', '.note-template-item .minus-trigger')
+                    .on('click.minus-trigger', '.note-template-item .minus-trigger', function() {
+                        let item = $(this).closest('.note-template-item');
+                        if(item.attr('prefix') === '(-)') {
+                            item.removeAttr('prefix');
+                            item.find('>.note-template-text>.label>input[type="checkbox"]').prop('checked', false);
+                            item.removeClass('selected');
+                        }
+                        else {
+                            item.attr('prefix', '(-)');
+                            item.find('>.note-template-text>.label>input[type="checkbox"]').prop('checked', true);
+                            item.addClass('selected');
+                        }
+                        generateTemplateOutput();
+                        return false;
+                    });
+
+                $(document)
+                    .off('change.note-template-set-chooser', '.note-template-set-chooser')
+                    .on('change.note-template-set-chooser', '.note-template-set-chooser', function() {
+                        return loadTemplateSet($(this));
+                    });
+
+                $(document)
+                    .off('change.note-exam-template-set-chooser', '.note-exam-template-set-chooser')
+                    .on('change.note-exam-template-set-chooser', '.note-exam-template-set-chooser', function() {
+                        $(this).closest('.note-template-container')
+                            .find('.note-exam-exam-chooser')
+                                .val($(this).find('option:selected').attr('exam'));
+                        return loadExamTemplateSet($(this),
+                            $(this).closest('.note-template-container').find('.note-exam-exam-chooser').first().val(),
+                            $(this).val());
+                    });
+
+                $(document)
+                    .off('change.note-exam-exam-chooser', '.note-exam-exam-chooser')
+                    .on('change.note-exam-exam-chooser', '.note-exam-exam-chooser', function() {
+                        return loadExamTemplateSet($(this),
+                            $(this).val(),
+                            $(this).closest('.note-template-container').find('.note-exam-template-set-chooser').first().val());
+                    });
+
+                $('.remove-section-trigger').click(function() {
+                    $.post('/api/section/deactivate', {
+                        uid: $(this).attr('data-uid'),
+                        memo: 'Deactivated from note',
+                    }, function(_data) {
+                        if(_data) {
+                            if(_data.success) {
+                                fastReload();
+                            }
+                            else {
+                                toastr.error(_data.message);
+                            }
+                        }
+                        else {
+                            toastr.error('Unable to remove section!');
+                        }
+                    }, 'json');
+                    // $(this).closest('.note-section').removeClass('edit');
+                    return false;
+                });
+
+                @if(!$note->visitTemplate)
+                $(document)
+                    .off('mousedown.enable-edit', '.note-section:not(.edit):not(.page-driven)')
+                    .on('mousedown.enable-edit', '.note-section:not(.edit):not(.page-driven)', function(e) {
+                        if($(this).closest('.note-signed-by-hcp').length) return;
+                        e.stopPropagation();
+                        e.preventDefault();
+                        $(this).find('.edit-trigger').first().click();
+                        return false;
+                    });
+                @endif
+
+                $(document)
+                    .off('keydown.collapse-active-segment')
+                    .on('keydown.collapse-active-segment', function(e) {
+                        if(e.which === 27) {
+                            if(!isEventConsumed(e)) {
+                                if($('.visit-segment.edit').length) {
+                                    $('.visit-segment.edit').first().find('.edit-trigger').first().click();
+                                    markEventAsConsumed(e);
+                                    return false;
+                                }
+                            }
+                            else {
+                                // event already consumed!
+                            }
+                        }
+                    });
+
+                scrollToLatest();
+
+                function __moveSection(_uid, _direction) {
+                    $.post('/api/section/move' + _direction, {
+                        uid: _uid
+                    }, function(_data) {
+                        if(_data && _data.success) {
+                            fastReload();
+                        }
+                        else {
+                            if(_data) {
+                                toastr.error(_data.message);
+                            }
+                            else {
+                                toastr.error('Unknown error while moving section');
+                            }
+                        }
+                    }, 'json')
+                }
+
+                $('.move-up-trigger').click(function() {
+                    __moveSection($(this).attr('data-uid'), 'Up');
+                });
+
+                $('.move-down-trigger').click(function() {
+                    __moveSection($(this).attr('data-uid'), 'Down');
+                });
+
+                // refresh once ticket popup is closed
+                /*$('body').off('stag-popup-closed')
+                $('body').on('stag-popup-closed', function() {
+                    if($('#note-single-header').length) {
+                        fastReload();
+                    }
+                });*/
+                // ticket-popup
+                $(document)
+                    .off('click', '.ticket-popup-trigger.note-dashboard-action')
+                    .on('click', '.ticket-popup-trigger.note-dashboard-action', function() {
+                        showMask();
+                        window.noMc = true;
+                        $.get(this.href, (_data) => {
+
+                            if(!$('.ticket-popup').length) {
+                                $('main.stag-content').append('<div class="stag-popup stag-popup-lg ticket-popup mcp-theme-1" stag-popup-key="ticket-popup"></div>');
+                            }
+
+                            $('.ticket-popup').html(_data);
+                            showStagPopup('ticket-popup', true);
+                            $('.ticket-popup .stag-popup.stag-slide').attr('close-all-with-self', 1);
+                            runMCInitializer('patient-tickets'); // run specific mc initer
+                            hideMask();
+                        });
+                        return false;
+                    });
+
+            }
+
+            // scroll to latest created section
+            function scrollToLatest() {
+                window.setTimeout(function() {
+                    let latestSectionTS = $('.latest-section-ts');
+                    if(latestSectionTS.length) {
+                        let latestSection = $('.note-section[data-ts="' + latestSectionTS.text() + '"]');
+                        if(latestSection.length) {
+                            latestSection[0].scrollIntoView({behavior: "smooth", block: "center"});
+                            // latestSection.find('.edit-trigger').first().click();
+                            console.log('DONE!');
+                        }
+                    }
+                }, 100);
+            }
+
+            function loadTemplateSet(_chooser) {
+                if(!_chooser.length || !_chooser.val()) return false;
+                let container = _chooser.closest('.note-template-container');
+                container.find('>.note-template-item').remove();
+                container.find('.please-wait').remove();
+                container.append('<p class="please-wait my-2 text-secondary text-center">Please wait ...</p>');
+                $.get('/note-template-set/' + _chooser.attr('data-section') + '/' + _chooser.val(), function(_html) {
+                    container.find('.please-wait').remove();
+                    container.append(_html);
+                });
+                return false;
+            }
+
+            function loadExamTemplateSet(_chooser, _exam, _templateSet) {
+                if(!_chooser.length || !_chooser.val()) return false;
+                let container = _chooser.closest('.note-template-container');
+                container.find('>.note-template-item').remove();
+                container.find('.please-wait').remove();
+                container.append('<p class="please-wait my-2 text-secondary text-center">Please wait ...</p>');
+                $.get('/note-template-set/exam/' + _exam + '/' + _templateSet, function(_html) {
+                    container.find('.please-wait').remove();
+                    container.append(_html);
+                });
+                return false;
+            }
+
+            function generateOutputForNode(_node) {
+                let template = (_node.attr('prefix') ? _node.attr('prefix') : '') + _node.attr('template'),
+                    value = template;
+                let hasChildText = !!_node.find('>.note-template-children>textarea,>.note-template-children>input[type="number"],>.note-template-children>input[type="date"]').length;
+                let hasChildren = !!_node.find('>.note-template-children>.note-template-item').length;
+                if(hasChildText) {
+                    value = value.replace('{text}',
+                        _node
+                            .find('>.note-template-children')
+                                .find('>textarea,>input[type="number"],>input[type="date"]').first().val());
+                }
+                else if(hasChildren) {
+                    let values = [];
+                    _node.find('>.note-template-children>.note-template-item.selected').each(function() {
+                        values.push(generateOutputForNode($(this)));
+                    });
+                    let combined = '';
+                    for (let i = 0; i < values.length; i++) {
+                        combined += values[i];
+                        if(values.length > 1 && i <= values.length - 2) {
+                            if(i === values.length - 2) {
+                                combined += ' and ';
+                            }
+                            else {
+                                combined += ', ';
+                            }
+                        }
+                    }
+                    value = value.replace('{children}', ' ' + combined).replace('{text}', ' ' + combined);
+                }
+                return value;
+            }
+
+            function generateTemplateOutput() {
+                let container = $('.note-template-container:visible').first();
+                if(!container.length) return '';
+                let lines = [];
+                if(container.find('.note-template-set-chooser').length) {
+                    lines.push('<b>' + container.find('.note-template-set-chooser').first().find('option:selected').text() + '</b>');
+                }
+                else if(container.find('.note-exam-template-set-chooser').length && container.find('.note-exam-exam-chooser').length) {
+                    lines.push('<b>' +
+                        container.find('.note-exam-template-set-chooser').first().find('option:selected').text() +
+                        ': ' +
+                        container.find('.note-exam-exam-chooser').first().find('option:selected').text() +
+                        '</b>');
+                }
+                container.find('>.note-template-item.selected').each(function() {
+                    lines.push('<p class="note-template-output-line">' + generateOutputForNode($(this)) + '</p>');
+                });
+                $('.note-template-output-text:visible').first().html(lines.join(''));
+            }
+
+            addMCInitializer('note-single', init, '#note-single-header');
+        })();
+    </script>