PageSourceSearch

https://www.alpha-innotec.com/webapp-resource/4.4136ca3118cfdfd6ce…/1634026651752/webapp-assets.js

js alpha-innotec.com collected 2026-10-04 12:38:24 UTC 18,008 bytes, 228 lines download raw bytes

1AppRegistry.registerBundle({applicationId:'nibe.seo_dashboard|1.3.4',bundle: {}});
2AppRegistry.registerModule({applicationId:'nibe.seo_dashboard|1.3.4',path:'/component/Entries',module:function(define){'use strict';define(function (require) {
3    'use strict';
4
5    var _ = require('underscore');
6    var ListComponent = require('ListComponent');
7
8    return ListComponent.extend({
9
10        childProperty: 'entry',
11
12        childComponentPath: 'Entry',
13
14        filterState: function (state) {
15            return _.extend({}, { entry: state.data });
16        }
17    });
18});}});
19AppRegistry.registerModule({applicationId:'nibe.seo_dashboard|1.3.4',path:'/template/main',module:function(define){define(function(require){var _=require('underscore');return function(obj){
20var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
21with(obj||{}){
22__p+=''+
23((__t=( renderer.renderComponent('Entries') ))==null?'':__t)+
24'\r\n';
25}
26return __p;
27};});}});
28AppRegistry.registerModule({applicationId:'nibe.seo_dashboard|1.3.4',path:'/template/entry',module:function(define){define(function(require){var _=require('underscore');return function(obj){
29var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};
30with(obj||{}){
31__p+='<div class="nb-seo-audit">\r\n\r\n    <div class="nb-seo-audit-header">\r\n        <div class="nb-seo-audit-url"><a href="'+
32((__t=( editUri ))==null?'':__t)+
33'" class="nb-seo-audit-url-link">'+
34((__t=( url ))==null?'':__t)+
35'</a></div>\r\n\r\n        <div class="nb-seo-audit-checks">\r\n\r\n            <a href="#title-element" class="nb-seo-audit-check">\r\n                <span class="nb-seo-audit-check-icon '+
36((__t=( checkTitle(seo.title, seo.siteTitle).class ))==null?'':__t)+
37'"></span>\r\n                <span class="nb-seo-audit-check-title">Title Element</span>\r\n            </a>\r\n\r\n            <a href="#meta-description" class="nb-seo-audit-check">\r\n                <span class="nb-seo-audit-check-icon '+
38((__t=( checkMetaDescription(seo.metaDescription).class ))==null?'':__t)+
39'"></span>\r\n                <span class="nb-seo-audit-check-title">Meta description</span>\r\n            </a>\r\n            <!--\r\n            <a href="#h1-heading" class="nb-seo-audit-check">\r\n                <span class="nb-seo-audit-check-icon '+
40((__t=( checkH1(seo.h1).class ))==null?'':__t)+
41' "></span>\r\n                <span class="nb-seo-audit-check-title">H1 heading</span>\r\n            </a>\r\n            -->\r\n            <a href="#optimized-images" class="nb-seo-audit-check">\r\n                <span class="nb-seo-audit-check-icon '+
42((__t=( checkImages(seo.images).class ))==null?'':__t)+
43'"></span>\r\n                <span class="nb-seo-audit-check-title">Optimized images</span>\r\n            </a>\r\n\r\n        </div>\r\n    </div>\r\n\r\n    <div class="nb-seo-audit-items">\r\n\r\n        <div id="title-element" class="nb-seo-audit-item">\r\n            <div class="nb-seo-audit-item-content">\r\n                <div class="nb-seo-audit-check">\r\n                    <span class="nb-seo-audit-check-icon '+
44((__t=( checkTitle(seo.title, seo.siteTitle).class ))==null?'':__t)+
45'"></span>\r\n                    <span class="nb-seo-audit-check-title">Title Element</span>\r\n                </div>\r\n                <div class="nb-seo-audit-item-title">'+
46((__t=( checkTitle(seo.title, seo.siteTitle).msg ))==null?'':__t)+
47'</div>\r\n                <div class="nb-seo-audit-item-description">\r\n                    ';
48 if (seo.title.trim()) { 
49__p+='\r\n                        ';
50 var customTitle = seo.title + ' - ' + seo.siteTitle 
51__p+='\r\n                        <b>Current custom title:</b>\r\n                        '+
52((__t=( '"' + customTitle + '" ( ' + customTitle.length + ' characters )' ))==null?'':__t)+
53'\r\n                        <br>\r\n                    ';
54 } 
55__p+='\r\n                    <p><b>Title:</b> Title tags are the second most important on-page ranking factor, after content.\r\n                        Title tags are a major factor in helping search engines understand what your page is about,\r\n                        and they are the first impression many people have of your page.</p>\r\n\r\n                    <p>Unique titles also help search engines understand that your content is unique and valuable,\r\n                        and also drive higher click-through rates.\r\n                        A good title can be the make-or-break factor in determining whether or not\r\n                        someone clicks on your link in the Search Engine Results Pages (SERPs).</p>\r\n\r\n                    <p><b>Optimal title length:</b> If your title is too long, search engines may cut it off by adding\r\n                        an ellipsis ("...").\r\n                        There is no exact character limit but Google typically displays the first 50–60 characters of a\r\n                        title tag.\r\n                        The exact limit is a bit more complicated and is based on a 600-pixel container.</p>\r\n\r\n                    <p><b>Keywords in the title:</b> You should absolutely put the primary keyword for the page in the\r\n                        beginning of the title\r\n                        but avoid titles that are just a list of keywords or repeat variations of the same keyword over\r\n                        and over.</p>\r\n\r\n                    <p><b>How to set a unique page title in Sitevision:</b> Mark the page --&gt; Properties --&gt;\r\n                        Settings --&gt; Page Title</p>\r\n\r\n                    <button onclick="window.open(\''+
56((__t=( editUri ))==null?'':__t)+
57'/properties/webResourceSettings\', \'_top\')" class="nb-seo-audit-edit-btn">Edit custom title</button>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div id="meta-description" class="nb-seo-audit-item">\r\n            <div class="nb-seo-audit-item-content">\r\n                <div class="nb-seo-audit-check">
57\r\n                    <span class="nb-seo-audit-check-icon '+
58((__t=( checkMetaDescription(seo.metaDescription).class ))==null?'':__t)+
59'"></span>\r\n                    <span class="nb-seo-audit-check-title">Meta description</span>\r\n                </div>\r\n                <div class="nb-seo-audit-item-title">'+
60((__t=( checkMetaDescription(seo.metaDescription).msg ))==null?'':__t)+
61'</div>\r\n                <div class="nb-seo-audit-item-description">\r\n                    ';
62 if (seo.metaDescription.trim()) { 
63__p+='\r\n                        <b>Current meta description:</b>\r\n                        '+
64((__t=( '"' + seo.metaDescription + '" ( ' + seo.metaDescription.length + ' characters )' ))==null?'':__t)+
65'\r\n                        <br>\r\n                    ';
66 } 
67__p+='\r\n                    <p><b>Meta description:</b> Meta description is an HTML attribute that provides a brief summary of a\r\n                        web page.\r\n                        Search engines often display the meta description in search results and are extremely\r\n                        important to improve user click-through rates (CTR).</p>\r\n\r\n                    <p>The meta description should in a natural and non-spammy way contain the keyword(s) the page is\r\n                        targeting.\r\n                        It should be directly relevant to the page it describes, and unique from the descriptions for\r\n                        other pages.</p>\r\n\r\n                    <p><b>Meta descriptions should:</b>\r\n                        <ul>\r\n                            <li>be unique</li>\r\n                            <li>contain the most important keyword for the page</li>\r\n                            <li>be between 50-155 characters long</li>\r\n                        </ul>\r\n                    </p>\r\n\r\n                    <p><b>Try to:</b>\r\n                        <ul>\r\n                            <li>convince the user that we have the solution to their problem</li>\r\n                            <li>tell the user that we have the answer to their search intent</li>\r\n                        </ul>\r\n                    </p>\r\n\r\n                    <p><b>How to set a unique Meta description in Sitevision:</b> Mark the page --&gt; Properties --&gt;\r\n                        Metadata --&gt; Description</p>\r\n                    \r\n                    <button onclick="window.open(\''+
68((__t=( editUri ))==null?'':__t)+
69'/properties/metadata\', \'_top\')" class="nb-seo-audit-edit-btn">Edit description</button>                    \r\n                </div>\r\n            </div>\r\n        </div>\r\n        <!--\r\n        <div id="h1-heading" class="nb-seo-audit-item">\r\n            <div class="nb-seo-audit-item-content">\r\n                <div class="nb-seo-audit-check">\r\n                    <span class="nb-seo-audit-check-icon '+
70((__t=( checkH1(seo.h1).class ))==null?'':__t)+
71'"></span>\r\n                    <span class="nb-seo-audit-check-title">H1 heading</span>\r\n                </div>\r\n                <div class="nb-seo-audit-item-title">'+
72((__t=( checkH1(seo.h1).msg ))==null?'':__t)+
73'</div>\r\n                <div class="nb-seo-audit-item-description">\r\n                    ';
74 if (seo.h1 > 1 || seo.h1 < 1) { 
75__p+='\r\n                        <b>Current amount of H1 headings on page:</b> '+
76((__t=( seo.h1 ))==null?'':__t)+
77'\r\n                        <br>\r\n                    ';
78 } 
79__p+='\r\n                    <p><b>Headings: </b>Headings (H1-H6) are used to show important text where the H1 is the most important.\r\n                        <ul>\r\n                            <li>An H1 should only be used once per page and should contain the most important keyword/phrase for the page.</li>\r\n                            <li>H2 and H3 and so on are used as sub-headings on the page and may contain variants of the keyword or search phrase. \r\n                                May occur more often on a page but avoid nestled headings.</li>\r\n                        </ul>\r\n                    </p>\r\n                    <p>The keyword(s) for the page should appear naturally in the text under the headings.</p>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        -->\r\n        <div id="optimized-images" class="nb-seo-audit-item">\r\n            <div class="nb-seo-audit-item-content">\r\n                <div class="nb-seo-audit-check"><span\r\n                        class="nb-seo-audit-check-icon '+
80((__t=( checkImages(seo.images).class ))==null?'':__t)+
81'"></span><span\r\n                        class="nb-seo-audit-check-title">Optimized images</span></div>\r\n                <div class="nb-seo-audit-item-title">'+
82((__t=( checkImages(seo.images).msg ))==null?'':__t)+
83'</div>\r\n                <div class="nb-seo-audit-item-description">\r\n                    ';
84 if(!checkImages(seo.images).passed) { 
85__p+='\r\n                    <div class="nb-seo-audit-table">\r\n                        <div class="nb-seo-audit-table-row">\r\n                            <div class="nb-seo-audit-table-col">File</div>\r\n                            <div class="nb-seo-audit-table-col">Size</div>\r\n                        </div>\r\n                        ';
86 for(var i = 0; i < seo.images.length; i++) { 
87__p+='\r\n                        <div class="nb-seo-audit-table-row">\r\n                            <div class="nb-seo-audit-table-col">\r\n                                <a onclick="window.open(\''+
88((__t=( seo.images[i].editUri ))==null?'':__t)+
89'\', \'_blank\')">'+
90((__t=( seo.images[i].fileName ))==null?'':__t)+
91'</a>\r\n                            </div>\r\n                            <div class="nb-seo-audit-table-col">'+
92((__t=( seo.images[i].humanByte ))==null?'':__t)+
93'</div>\r\n                        </div>\r\n                        ';
94 } 
95__p+='\r\n                    </div>\r\n                    ';
96 } 
97__p+='\r\n\r\n                    <p><b>Images: </b>Try to keep the images as small and optimized as possible due to webpage loading speed which is a crucial ranking factor.</p>\r\n                    <p><b>Images should:</b>\r\n                        <ul>\r\n                            <li>always be as small as possible both in height/width</li>\r\n                            <li>in most cases not be over 100kB</li>\r\n                            <li>be named in a way that describes what it is about</li>\r\n                            <li>be named with keywords from the page</li>\r\n                            <li>be using the Alternate (Alt) tag to describe what the image is about</li>\r\n                        </ul>\r\n                    </p>\r\n                    <p>Select Image --&gt; Click --&gt; Settings --&gt; Tab Text --&gt; Specify custom(Alternative Text)</p>\r\n                    <p><b>Tip: </b>Use an online service to reduce the image sizes like: <a onclick="window.open(\'https:\\/\\/squoosh.app\', \'_blank\')">https://squoosh.app</a></p>\r\n                </div>\r\n            </div>\r\n\r\n\r\n        </div>\r\n    </div>\r\n\r\n\r\n\r\n</div>';
98}
99return __p;
100};});}});
101AppRegistry.registerModule({applicationId:'nibe.seo_dashboard|1.3.4',path:'/component/Entry',module:function(define){'use strict';define(function (require) {
102    'use strict';
103
104    var Component = require('Component');
105    var template = require('/template/entry');
106    var $ = require('jquery');
107
108    return Component.extend({
109        template: template,
110
111        tagName: 'div',
112
113        className: 'seo-entry',
114
115        events : {
116            dom: {
117                'click .nb-seo-audit-item-title': 'toggleDescription'
118            }
119        },
120
121        toggleDescription: function(e) {
122            $(e.target).closest('.nb-seo-audit-item').toggleClass('nb-seo-audit-item-has-visible-description');
123        },
124
125        templateFunctions: function () {
126            return {
127                checkTitle: function (title, siteTitle) {
128                    let customTitle = title + ' - ' + siteTitle;
129                    
130                    if (title.trim()) {
131                        if (customTitle.length < 60) {
132                            return {
133                                class: 'nb-seo-audit-check-icon-passed',
134                                msg: 'There\'s a custom title!'  
135                            }
136                        } else {
137                            return {
138                                class: '',
139                                msg: 'Custom title is too long!'
140                            }
141                        }
142                    } else {
143                        return {
144                            class: '',
145                            msg: 'Enter a custom title for the page!'
146                        }
147                    }
148                },
149                checkMetaDescription: function (metaDescription) {
150                    var chars = metaDescription.length;
151
152                    if (metaDescription.trim()) {
153                        if (chars < 50) {
154                            return {
155                                class: '',
156                                msg: 'The meta description is too short!'
157                            }
158                        } else if (chars > 155) {
159                            return {
160                                class: '',
161                                msg: 'The meta description is too long!'
162                            }
163                        } else {
164                            return {
165                                class: 'nb-seo-audit-check-icon-passed',
166                                msg: 'The meta description is optimized for search engines!'
167                            }
168                        }
169                    } else {
170                        return {
171                            class: '',
172                            msg: 'There is no meta description!'
173                        }
174                    }
175                },
176                checkH1: function (h1) {
177                    if (h1 > 1) {
178                        return {
179                            class: '',
180                            msg: 'Use only <u>one</u> h1 heading'
181                        }
182                    } else if (h1 < 1) {
183                        return {
184                            class: '',
185                            msg: 'There is <u>no</u> h1 heading on page'
186                        }
187                    } else {
188                        return {
189                            class: 'nb-seo-audit-check-icon-passed',
190                            msg: 'H1 is OK!'
191                        }
192                    }
193                },
194                checkImages: function (images) {
195                    if (images.length == 0){
196                        return {
197                            class: 'nb-seo-audit-check-icon-passed',
198                            msg: 'There are no images to optimize!',
199                            passed: true
200                        }
201                    } else {
202                        return {
203                            class: '',
204                            msg: 'There are images that needs optimization!',
205                            passed: false
206                        }
207                    }
208                }
209            }
210        }
211    });
212});}});
213AppRegistry.registerModule({applicationId:'nibe.seo_dashboard|1.3.4',path:'/main',module:function(define){'use strict';define(function (require) {
214	'use strict';
215
216	var _ = require('underscore');
217	var Component = require('Component');
218	var template = require('/template/main');
219
220	return Component.extend({
221		template: template,
222
223		filterState: function (state) {
224			return _.extend({}, state);
225		},
226	});
227});
228}});

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.