PageSourceSearch

https://www.seolium.com/js/index.js

js seolium.com collected 2026-09-25 00:35:32 UTC 9,525 bytes, 336 lines download raw bytes

1var engineUrl = "https://engine.seolium.com/";
2var loginUrl = "https://engine.seolium.com/login/";
3var loginRegisterLink = "https://www.seolium.com/confirm-account";
4var loginRecoveryLink = "https://www.seolium.com/password-reset";
5var loginLang = "en";
6
7jQuery(document).ready(function($){
8  var $form_modal = $('.user-modal'),
9    $form_login = $form_modal.find('#login'),
10    $form_signup = $form_modal.find('#signup'),
11    $form_forgot_password = $form_modal.find('#reset-password'),
12    $form_modal_tab = $('.switcher'),
13    $tab_login = $form_modal_tab.children('li').eq(0).children('a'),
14    $tab_signup = $form_modal_tab.children('li').eq(1).children('a'),
15    $forgot_password_link = $form_login.find('.form-bottom-message a'),
16    $back_to_login_link = $form_forgot_password.find('.form-bottom-message a');
17    $main_nav = $('.main-nav');
18
19  //open modal
20  $main_nav.on('click', function(event){
21
22    if( $(event.target).is($main_nav) ) {
23      // on mobile open the submenu
24      $(this).children('ul').toggleClass('is-visible');
25    } else {
26      // on mobile close submenu
27      $main_nav.children('ul').removeClass('is-visible');
28      //show modal layer
29      $form_modal.addClass('is-visible'); 
30      //show the selected form
31      ( $(event.target).is('.signup') ) ? signup_selected() : login_selected();
32    }
33
34  });
35
36  //close modal
37  $('.user-modal').on('click', function(event){
38    if( $(event.target).is($form_modal) || $(event.target).is('.close-form') ) {
39      $form_modal.removeClass('is-visible');
40    } 
41  });
42  //close modal when clicking the esc keyboard button
43  $(document).keyup(function(event){
44      if(event.which=='27'){
45        $form_modal.removeClass('is-visible');
46      }
47    });
48
49  //switch from a tab to another
50  $form_modal_tab.on('click', function(event) {
51    event.preventDefault();
52    ( $(event.target).is( $tab_login ) ) ? login_selected() : signup_selected();
53  });
54
55  //hide or show password
56  $('.hide-password').on('click', function(){
57    var $password = $(this).prev('input');
58    var $eye = $(this).find('.glyphicon');
59    if ($eye.hasClass('glyphicon-eye-open')){
60      $eye.removeClass('glyphicon-eye-open');
61      $eye.toggleClass('glyphicon-eye-close');
62      $password.attr('type', 'text')
63    } else {
64      $eye.removeClass('glyphicon-eye-close');
65      $eye.toggleClass('glyphicon-eye-open');
66      $password.attr('type', 'password')
67    }
68    //focus and move cursor to the end of input field
69    $password.putCursorAtEnd();
70  });
71
72  //show forgot-password form 
73  $forgot_password_link.on('click', function(event){
74    event.preventDefault();
75    forgot_password_selected();
76  });
77
78  //back to login from the forgot-password form
79  $back_to_login_link.on('click', function(event){
80    event.preventDefault();
81    login_selected();
82  });
83
84  function login_selected(){
85    $form_login.addClass('is-selected');
86    $form_signup.removeClass('is-selected');
87    $form_forgot_password.removeClass('is-selected');
88    $tab_login.addClass('selected');
89    $tab_signup.removeClass('selected');
90  }
91
92  function signup_selected(){
93    $form_login.removeClass('is-selected');
94    $form_signup.addClass('is-selected');
95    $form_forgot_password.removeClass('is-selected');
96    $tab_login.removeClass('selected');
97    $tab_signup.addClass('selected');
98    $("#loginErrorMessage").removeClass("is-visible");
99  }
100
101  function forgot_password_selected(){
102    $form_login.removeClass('is-selected');
103    $form_signup.removeClass('is-selected');
104    $form_forgot_password.addClass('is-selected');
105    $("#loginErrorMessage").removeClass("is-visible");
106  }
107
108  bindButton($form_login.find('input[type="submit"]'), 2000, login);
109  bindButton($form_signup.find('input[type="submit"]'), 4000, register);
110  bindButton($form_forgot_password.find('input[type="submit"]'), 2000, forgotPassword);
111  
112  $("html").click(function(){
113    $("#languageMenu").hide();
114  })
115
116  $("#languageButton").click(function(event){
117    event.stopPropagation();
118    if ($("#languageMenu").is(":visible")){
119      $("#languageMenu").hide();
120    } else {
121      $("#languageMenu").show();
122    }
123  })
124
125  $(".menuicon").on("click", function(event){
126  	console.log("Meeeeeeeeeeeeee");
127	event.stopPropagation();
128    if ($(".meniu").is(":visible")){
129      $(".meniu").hide();
130    } else {
131      $(".meniu").show();
132    }
133  })
134
135  //IE9 placeholder fallback
136  //credits http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html
137/*  if(!Modernizr.input.placeholder){
138    $('[placeholder]').focus(function() {
139      var input = $(this);
140      if (input.val() == input.attr('placeholder')) {
141        input.val('');
142        }
143    }).blur(function() {
144      var input = $(this);
145        if (input.val() == '' || input.val() == input.attr('placeholder')) {
146        input.val(input.attr('placeholder'));
147        }
148    }).blur();
149    $('[placeholder]').parents('form').submit(function() {
150        $(this).find('[placeholder]').each(function() {
151        var input = $(this);
152        if (input.val() == input.attr('placeholder')) {
153          input.val('');
154        }
155        })
156    });
157  }
158*/
159});
160
161
162//credits http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
163jQuery.fn.putCursorAtEnd = function() {
164  return this.each(function() {
165      // If this function exists...
166      if (this.setSelectionRange) {
167          // ... then use it (Doesn't work in IE)
168          // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh.
169          var len = $(this).val().length * 2;
170          this.setSelectionRange(len, len);
171      } else {
172        // ... otherwise replace the contents with itself
173        // (Doesn't work in Google Chrome)
174          $(this).val($(this).val());
175      }
176  });
177};
178
179///////
180///////   LOGIN AND REGISTER CODE
181///////
182///////
183///////
184///////
185///////
186///////
187///////
188///////
189///////
190///////
191///////
192
193function closeDialog(){
194  $('.user-modal').removeClass('is-visible');
195}
196
197function login() {
198  var signinEmail = $('#signin-email').val();
199  var signinPassword = $('#signin-password').val();
200  myAjax({
201    url: 'LoginServlet',
202    data: {
203      email: signinEmail,
204      password: signinPassword
205    },
206    success: function(res) {
207      console.log("login success");
208      console.log(res);
209      pushCookie(res.tokenID);
210      setCookie(res.tokenID, $('#rememberMe').is(':checked'));
211      closeDialog();
212      window.location.href = "https://www.seolium.com/seo/tools/projects/";
213    },
214    error: function(data) {
215      console.log("login error");
216      $("#loginErrorMessage").addClass("is-visible");
217      setTimeout(function(){
218        $("#loginErrorMessage").removeClass("is-visible");
219      }, 4000);
220    }
221  });
222}
223
224function register() {
225  var signupEmail = $('#signup-email').val();
226  myAjaxUrl({
227    url: 'register',
228    data: {
229      email: signupEmail
230    },
231    success: function(res) {
232      gtag("event", "Registration", {
233      	"event_category": "Conversion",
234        "event_label": "Menu",
235      	"UserId": res.userId
236      });
237      gtag("event", "SetEmail", {"UserEmail": signupEmail, "UserId": res.userId});
238      console.log(res);
239      console.log("signup success");
240      console.log(res.userId);
241      $("#registerMessage").show();
242      setTimeout(function(){
243        $("#registerMessage").hide();
244        closeDialog();
245      }, 4000);
246    },
247    error: function(res) {
248      console.log("signup error");
249      $("#signupErrorMessage").addClass("is-visible");
250      setTimeout(function(){
251        $("#signupErrorMessage").removeClass("is-visible");
252      }, 7000);
253    }
254  }, "project/");
255}
256
257function forgotPassword() {
258  forgotEmailValue = $('#reset-email').val();
259  myAjax({
260    url: 'changepassword',
261    data: {
262      forgotEmail: forgotEmailValue
263    },
264    success: function(res) {
265      closeDialog();
266    },
267    error: function(res) {
268      console.log("forgot password error");
269      $("#forgotMessage").show();
270      setTimeout(function(){
271        $("#forgotMessage").hide();
272        closeDialog();
273      }, 7000);
274    }
275  })
276}
277
278function pushCookie(cookie) {
279  console.log("pushing user information");
280  myAjax({
281    url: "Cookie",
282    data: {
283      tokenID: cookie
284    },
285    success: function(){
286      console.log("pushed");
287    },
288    error: function(){
289      console.log("pushing error");
290    }
291  });
292}
293
294function setCookie(cookieValue, isRemembered) {
295  var timeToStay = isRemembered ? (10 * 24 * 60 * 60 * 1000) : (60 * 60 * 1000);
296  var rememberPostfix = isRemembered ? "" : "!";
297  var finalCookieValue = cookieValue + rememberPostfix;
298  var date = new Date();
299  date.setTime(date.getTime() + timeToStay);
300  document.cookie = "userCookie=" + finalCookieValue + "; expires=" + date.toGMTString() + "; path=/";
301}
302
303function myAjax(object){
304  myAjaxUrl(object, "login/");
305}
306
307function myAjaxUrl(object, baseUrl) {
308  $.ajax({
309    url : engineUrl + baseUrl + object.url,
310    type : "GET",
311    dataType : "jsonp",
312    data : object.data,
313    xhrFields : {
314      withCredentials : true
315    },
316    success : function(data) {
317      if (!data.hasOwnProperty("errorCode") || data.errorCode != 0) {
318        object.error(data);
319      } else {
320	object.success(data);
321      }
322    },
323    error : object.error
324  })
325}
326
327function bindButton(button, time, callback){
328    button.on('click', function(event){
329      event.preventDefault();
330      button.prop('disabled', true);
331      setTimeout(function(){
332        button.prop('disabled', false);
333      }, time);
334      callback();
335    })
336  }

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.