Ошибка не удалось получить свойство replace ссылки значение которой не определено или является null

При попытке входа в личный кабинет ЕГАИС по адресу egais.ru после ввода PIN-кода возникают две ошибки подряд:

При попытке входа в личный кабинет ЕГАИС по адресу egais.ru после ввода PIN-кода возникают две ошибки подряд:

«Подробности: undegined Апплет: undegined»

«Не удалось получить свойство «replace» ссылки, значение которой не определено или не является NULL»

Причина в том, что сертификат ГОСТ содержит в атрибуте CKA_ID слишком длинное значение. 

Несмотря на то, что по стандарту PKCS#11 длина поля CKA_ID не ограничена, в ЛК ЕГАИС установлено ограничение на количество символов — 19 байт (19 пар символов).

На текущий момент информация об ошибке уже передана разработчикам ЛК ЕГАИС и производится исправление проверки в ЛК ЕГАИС.

Для решения проблемы выполните следующие действия:

1) Проверьте, что к компьютеру подключен только один Рутокен

2) Скачайте архив с утилитой и разархивируйте его

3) Запустите утилиту для исправления CKA_ID

egais_fix_id.zip 

4) Повторите попытку входа в ЛК ЕГАИС

Если у вас остались вопросы, обратитесь в службу технической поддержки — наши специалисты с удовольствием помогут вам убрать символы, мешающие входу. 

  • Remove From My Forums
  • Вопрос

  • После установки обновления возникла проблема с отображением данных в списках.

    В ряде списков выводит:

    TypeError: Не удалось получить свойство «replace» ссылки, значение которой не определено или является NULL.

    При анализе нашел — проблемы в представлениях с полем «Название (с сылкой на элемент в меню правки). 

    Замена поля на «Название» приводит к нормальному отображению данных в табличной форме.

    Буду рад услышать мнение, как бороться с этой заразой другим способом.

    • Изменено

      14 января 2016 г. 11:54

Ответы

  • Нашел в Инете:

    Apply the Cumulative Update for SharePoint 2013 (Foundation, Server, or Project). This should resolve the issue. This appears to be caused from applying MS16-004 while having a previous Cumulative Update installed.

    Cannot reproduce from a system upgraded to the SharePoint Server 2013 Jan 2016 CU, but can reproduce on another farm by only upgrading to MS16-004 with Sept 2015 CU applied.

    EDIT: Stefan Goßner has also indicated it can be resolved by installing hotfix
    KB3114508, also released on Tuesday 01/12/16.

    http://sharepoint.stackexchange.com/questions/167034/sharepoint-2013-jan-2016-updates/167054

    • Изменено
      antsv
      18 января 2016 г. 14:47
    • Помечено в качестве ответа
      antsv
      18 января 2016 г. 14:47

I add a item in custom list after the display shortly following errors:

TypeError: Unable to get property ‘replace’ of undefined or null reference

TypeError: Unable to get property ‘replace’ of undefined or null referenceSys.ArgumentNullException: Sys.ArgumentNullException: Value cannot be null. Parameter name: element

asked Jan 13, 2016 at 8:04

Nguyen Long Khang's user avatar

I have the same problem.
Here is link to tmp workaround:

Edit list view and change field «Item Text (linked to item with edit menu)» to
«Item Text (linked to item)«. Error disappears after that.

Update:

I confirm that install last update (2016-01) solved the problem.

Community's user avatar

answered Jan 13, 2016 at 22:15

Petr Spacek's user avatar

1

I add a item in custom list after the display shortly following errors:

TypeError: Unable to get property ‘replace’ of undefined or null reference

TypeError: Unable to get property ‘replace’ of undefined or null referenceSys.ArgumentNullException: Sys.ArgumentNullException: Value cannot be null. Parameter name: element

asked Jan 13, 2016 at 8:04

Nguyen Long Khang's user avatar

I have the same problem.
Here is link to tmp workaround:

Edit list view and change field «Item Text (linked to item with edit menu)» to
«Item Text (linked to item)«. Error disappears after that.

Update:

I confirm that install last update (2016-01) solved the problem.

Community's user avatar

answered Jan 13, 2016 at 22:15

Petr Spacek's user avatar

1

Старый

11.04.2011, 21:19

Новичок на форуме

Отправить личное сообщение для FenixGnom

Посмотреть профиль

Найти все сообщения от FenixGnom

 

Регистрация: 11.04.2011

Сообщений: 1

replace и ie и jquery

Всем привет, подскажите может уже кто ни будь сталкивался с такой проблемой, щас сначало покажу код а потом напишу что за ошибку он дает в осле

var linkPagi = $('#navi div a').filter('[class!=""]');

        idNa2 = linkPagi.attr('class'); // Активная в данный момент ссылка (ID)
        idNa1 = idNa2.replace(new RegExp('active-link-','gi'),'');
        idNa = parseInt(idNa1);
        console.log('idNa2:'+idNa2+'|idNa1:'+idNa1+'|idNa:'+idNa);

во всех браузерах работает нормально но вот осел мне пишет в консоли вот что

Не удалось получить значение свойства «replace»: значением объекта является NULL или он не определен

Ответить с цитированием

Старый

11.04.2011, 23:26

Человек

Отправить личное сообщение для 0931454574

Посмотреть профиль

Найти все сообщения от 0931454574

 

Регистрация: 10.03.2011

Сообщений: 305

Возможно поможет вот так == toString Преобразует регулярное выражение в строку.http://www.sd-company.su/sd_base_xp/…ipt_regexp.php

idNa1 = idNa2.replace(new RegExp('active-link-','gi').toString,'');

Я так понял вы хотите заменить все ссылки класса ‘active-link- на пусто.
Хотя мне кажется что я запутался,надеюсь что перевод ответа от RegExp в виде строки поможет!

__________________
XYZ

Ответить с цитированием

Старый

11.04.2011, 23:32

Человек

Отправить личное сообщение для 0931454574

Посмотреть профиль

Найти все сообщения от 0931454574

 

Регистрация: 10.03.2011

Сообщений: 305

ох я и мусор написал.пардон

__________________
XYZ

Ответить с цитированием

Старый

12.04.2011, 08:40

Профессор

Отправить личное сообщение для Matre

Посмотреть профиль

Найти все сообщения от Matre

 

Регистрация: 07.01.2011

Сообщений: 582

Проблема в первой строке, 100%.
$(‘#navi div a’).filter(‘[class!=»»]’) не находит ни одного элемента, и .attr() возвращает null.
Попробуйте так:

$('#navi div a').filter(function () {return this.className != ""})

Ответить с цитированием

denis_stell

1 / 1 / 0

Регистрация: 07.02.2010

Сообщений: 129

1

07.10.2017, 15:43. Показов 9132. Ответов 8

Метки нет (Все метки)


Всем привет!
Пишу mvc сайт (впервые), не могу понять как передать значение из input text в контроллер. Т.е. мне нужно чтобы пользователь ввел в текстовое поле, например 5, нажал кнопку, сработала маршрутизация, перевела пользователя к примеру так: /Clients/Tel/5
В другом случае я зделал так:

C#
1
2
3
4
5
6
7
8
@using (Html.BeginForm("Show", "Clients", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">        
        <input type="text" name="ls" id="ls" />
        <button class="btn btn-info" type="submit">Просмотр</button>
    </div>
}

В данном случае после нажатия на кнопку меня перенаправляет по пути /Clients/Show и внутрь контроллера передается значение из текстового поля. Явного /Clients/Show/5 в данном случае нет, по крайней мере в адресе ничего кроме /Clients/Show- нет
Думал, думал, может попытаться сделать используя JS

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
....
    <div class="form-horizontal">        
        <input type="text" name="ls" id="ls" />
        <button type="button" class="btn btn-info" onclick="location.href('@Url.Action("Register", "Contacts",new {id="xxx" })')" id="cont">Контакты</button>
    </div>  
 
  <script type="text/javascript">
    $(document).ready(function () {
        $("#cont").click(function () {
            var $cont = $("#cont")
            var href = $cont.attr("href");
            $cont.attr("href", href.replace("xxx", $("#ls").val()))
        });
    });
    </script>
Но выжает такую вот ошибку
0x800a138f - Ошибка выполнения JavaScript: Не удалось получить свойство "replace" ссылки, значение которой не определено или является NULL

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

DeadlySin

5 / 5 / 1

Регистрация: 25.03.2016

Сообщений: 106

07.10.2017, 16:15

2

контроллер Clients, в нем должен быть метод Show у него параметр должен быть Show(string ls) тоесть параметр должен называться так же как и атрибут name у инпута. Тогда будет все работать. Пример

C#
1
2
3
4
public ActionResult Show(string parameterName)
{
   // тут что то делаешь с этим параметром.
}
HTML5
1
2
3
4
5
6
7
8
9
@using (Html.BeginForm("Show", "Clients", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal"> 
     <!-- атрибут name такой же как в контроллере у метода параметр -->
        <input type="text" name="parameterName" id="ls" />
        <button class="btn btn-info" type="submit">Просмотр</button>
    </div>
}

1

lvlkoo

.NET C#,ASP.NET MVC

Эксперт .NET

592 / 503 / 225

Регистрация: 16.10.2010

Сообщений: 1,902

08.10.2017, 01:07

3

Цитата
Сообщение от DeadlySin
Посмотреть сообщение

FormMethod.Post

метод тоже должен быть пост

C#
1
2
[HttpPost]
public ActionResult Show(string parameterName)

1

denis_stell

1 / 1 / 0

Регистрация: 07.02.2010

Сообщений: 129

09.10.2017, 17:59

 [ТС]

4

DeadlySin, lvlkoo, спасибо за помощь!
подскажите еще пжлтс:
если на форме одна строка для ввода и 2 кнопки, каждая из которых по onclick должна перекидывать на нужный контроллер и соответственно экшин.

C#
1
2
3
4
5
6
7
8
9
10
11
@using (Html.BeginForm))
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal"> 
        <input type="text" name="id" id="ls" />
<button class="btn btn-info" type="submit" onclick="location.href('@Url.Action("Register", "Contacts")>Контакты</button>
<button class="btn btn-info" type="submit" onclick="location.href('@Url.Action("Show", "Clients")>Клиенты</button>
    </div>
//В данном случае конечно же ничего не передается
}
Нужно передавать одно значение из одного input text в разные контроллеры на одной форме.

А делать несколько не вариант

0

.NET C#,ASP.NET MVC

Эксперт .NET

592 / 503 / 225

Регистрация: 16.10.2010

Сообщений: 1,902

09.10.2017, 19:37

5

Цитата
Сообщение от denis_stell
Посмотреть сообщение

onclick должна перекидывать на нужный контроллер

Если метод гед то можно воспользоваться location.href

Если метод пост — есть два варианта — это сабмитить форму по клику, или слать аякс запрос на нужный екшн.

Подробнее опишите что вам нужно. Вы хотите данные формы слать на разные урлы?

0

.NET C#,ASP.NET MVC

Эксперт .NET

592 / 503 / 225

Регистрация: 16.10.2010

Сообщений: 1,902

09.10.2017, 19:38

6

Цитата
Сообщение от denis_stell
Посмотреть сообщение

onclick должна перекидывать на нужный контроллер

Если метод гед то можно воспользоваться location.href

Если метод пост — есть два варианта — это сабмитить форму по клику, или слать аякс запрос на нужный екшн.

Подробнее опишите что вам нужно. Вы хотите данные формы слать на разные урлы?

0

DeadlySin

5 / 5 / 1

Регистрация: 25.03.2016

Сообщений: 106

09.10.2017, 22:48

7

denis_stell,

ты можешь также сабмитам присвоить имя и значение и отправлять эти данные в контроллер на определенный экшн и разделять логику уже там. Если тебе надо без перехода, то ajax запрос при клике

Пример разделения логики в экшене:

HTML5
1
2
3
4
5
6
7
@using (Html.BeginForm("Index", "Report", FormMethod.Post))
{
// инпуты
 
<button type="submit" name="action" value="excelReport">Excel</button>
<button type="submit" name="action" value="getReport">Поиск</button>
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class ReportController : Controller
    {
        [HttpPost]
        public ActionResult Index(ReportModel model, string action)
        {
            if (action == "excelReport")
            {
                ExcelReport(model);
            }
            else if (action == "getReport")
            {
                return GetReport(model);
            }
 
            return View();
        }
 
        public ActionResult ExcelReport(ReportModel model)
        {
            //Логика ...
            return View();
        }
 
        public ActionResult GetReport(ReportModel model)
        {
            //Логика ...
            return View();
        }
}

0

1 / 1 / 0

Регистрация: 07.02.2010

Сообщений: 129

10.10.2017, 18:07

 [ТС]

8

lvlkoo,
Наверно не совсем так…
Представим, открывается сайт, на странице 1 input text, назовем «лицевой счет». Рядом с ним 2 кнопки — «Получить» и «Клиенты» (баттон/сабмит).
Вводим в поле «лицевой счет» значение — 55.
Нажимаем на 1-ую кнопку «Получить» — должно перейти на /Contacts/Show/55 — значение 55 должно попасть в контроллер и соответственно в экшин.
Если нажимаем на 2-ую кнопку «Клиенты» — должно перейти на /Client/ListShow/55 — значение 55 должно попасть в контроллер и соответственно в экшин.

Добавлено через 3 минуты
DeadlySin, в данном случае мне не подойдет.
нужно передавать из одного инпута переменные значения в разные формы (контроллеры и соответственно экшины) с помощью нескольких кнопок

0

5 / 5 / 1

Регистрация: 25.03.2016

Сообщений: 106

10.10.2017, 20:40

9

denis_stell, тогда про ajax запросы посмотри

0

This code throws error:
Unable to get property ‘replace’ of undefined or null reference

 function formatDate(dateVal) {

        var date = new Date(parseInt(dateVal.replace('/Date(', '')))
        var month = date.getMonth() + 1;
        var day = date.getDate();
        var year = date.getFullYear();
        return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
    }

The value being passed to it is null and is in format like /Date(-62135596800000)/.

Jack Bashford's user avatar

asked Jun 29, 2019 at 22:26

Stacky's user avatar

2

Well, if you pass a null value, it doesn’t have any properties. Make sure you pass the correct value:

function formatDate(dateVal) {
  var date = new Date(parseInt(dateVal.replace('/Date(', '')))
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var year = date.getFullYear();
  return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
}

console.log(formatDate("/Date(-62135596800000)/"));

answered Jun 29, 2019 at 22:28

Jack Bashford's user avatar

Jack BashfordJack Bashford

42.5k11 gold badges48 silver badges79 bronze badges

5

use default parameters like this formatDate(dateVal = «» ) ,It allows you to set default values for your function parameters if no value is passed or if undefined is passed:

function formatDate(dateVal = "" ) {
  var date = new Date(parseInt(dateVal.replace('/Date(', '')))
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var year = date.getFullYear();
  return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
}

answered Jun 29, 2019 at 22:33

Ghoul Ahmed's user avatar

Ghoul AhmedGhoul Ahmed

4,2581 gold badge13 silver badges23 bronze badges

1

Your issue seems to be that you’re expecting a string like «/Date(-62135596800000)/» but are getting something else. So validate the input before calling string methods to parse it, e.g.

function formatDate(dateVal) {

  // Test for string in required format
  if (!/^/Date([+-]?d{1,16})/$/.test(dateVal)) {
    return; // undefined
  }
  
  let date = new Date(parseInt(dateVal.replace('/Date(', '')))
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let year = ('000' + date.getFullYear()).slice(-4);
  return (day > 9 ? day : "0" + day) + "/" +
         (month > 9 ? month : "0" + month) + "/" +
          year;
}

// Simple tests
['/Date(-62135596800000)/',
  null,
  NaN,
  'sweet',
  1561853541934,
  '/Date(1561853541934)/'].forEach(
    v => console.log(v + ': ' + formatDate(v))
);

Then in the caller, you can test if you got back a string (success) or undefined, which indicates invalid input that you’ll need to deal with.

answered Jun 30, 2019 at 0:21

RobG's user avatar

RobGRobG

140k30 gold badges171 silver badges209 bronze badges

This code throws error:
Unable to get property ‘replace’ of undefined or null reference

 function formatDate(dateVal) {

        var date = new Date(parseInt(dateVal.replace('/Date(', '')))
        var month = date.getMonth() + 1;
        var day = date.getDate();
        var year = date.getFullYear();
        return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
    }

The value being passed to it is null and is in format like /Date(-62135596800000)/.

Jack Bashford's user avatar

asked Jun 29, 2019 at 22:26

Stacky's user avatar

2

Well, if you pass a null value, it doesn’t have any properties. Make sure you pass the correct value:

function formatDate(dateVal) {
  var date = new Date(parseInt(dateVal.replace('/Date(', '')))
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var year = date.getFullYear();
  return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
}

console.log(formatDate("/Date(-62135596800000)/"));

answered Jun 29, 2019 at 22:28

Jack Bashford's user avatar

Jack BashfordJack Bashford

42.5k11 gold badges48 silver badges79 bronze badges

5

use default parameters like this formatDate(dateVal = «» ) ,It allows you to set default values for your function parameters if no value is passed or if undefined is passed:

function formatDate(dateVal = "" ) {
  var date = new Date(parseInt(dateVal.replace('/Date(', '')))
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var year = date.getFullYear();
  return (day.toString().length > 1 ? day : "0" + day) + "/" + (month.toString().length > 1 ? month : "0" + month) + "/" + year;
}

answered Jun 29, 2019 at 22:33

Ghoul Ahmed's user avatar

Ghoul AhmedGhoul Ahmed

4,2581 gold badge13 silver badges23 bronze badges

1

Your issue seems to be that you’re expecting a string like «/Date(-62135596800000)/» but are getting something else. So validate the input before calling string methods to parse it, e.g.

function formatDate(dateVal) {

  // Test for string in required format
  if (!/^/Date([+-]?d{1,16})/$/.test(dateVal)) {
    return; // undefined
  }
  
  let date = new Date(parseInt(dateVal.replace('/Date(', '')))
  let month = date.getMonth() + 1;
  let day = date.getDate();
  let year = ('000' + date.getFullYear()).slice(-4);
  return (day > 9 ? day : "0" + day) + "/" +
         (month > 9 ? month : "0" + month) + "/" +
          year;
}

// Simple tests
['/Date(-62135596800000)/',
  null,
  NaN,
  'sweet',
  1561853541934,
  '/Date(1561853541934)/'].forEach(
    v => console.log(v + ': ' + formatDate(v))
);

Then in the caller, you can test if you got back a string (success) or undefined, which indicates invalid input that you’ll need to deal with.

answered Jun 30, 2019 at 0:21

RobG's user avatar

RobGRobG

140k30 gold badges171 silver badges209 bronze badges

  • Remove From My Forums
  • Вопрос

  • После установки обновления возникла проблема с отображением данных в списках.

    В ряде списков выводит:

    TypeError: Не удалось получить свойство «replace» ссылки, значение которой не определено или является NULL.

    При анализе нашел — проблемы в представлениях с полем «Название (с сылкой на элемент в меню правки). 

    Замена поля на «Название» приводит к нормальному отображению данных в табличной форме.

    Буду рад услышать мнение, как бороться с этой заразой другим способом.

    • Изменено

      14 января 2016 г. 11:54

Ответы

  • Нашел в Инете:

    Apply the Cumulative Update for SharePoint 2013 (Foundation, Server, or Project). This should resolve the issue. This appears to be caused from applying MS16-004 while having a previous Cumulative Update installed.

    Cannot reproduce from a system upgraded to the SharePoint Server 2013 Jan 2016 CU, but can reproduce on another farm by only upgrading to MS16-004 with Sept 2015 CU applied.

    EDIT: Stefan Goßner has also indicated it can be resolved by installing hotfix
    KB3114508, also released on Tuesday 01/12/16.

    http://sharepoint.stackexchange.com/questions/167034/sharepoint-2013-jan-2016-updates/167054

    • Изменено
      antsv
      18 января 2016 г. 14:47
    • Помечено в качестве ответа
      antsv
      18 января 2016 г. 14:47

var DT_CENTER = 0x00000001;
var DT_RIGHT = 0x00000002;
var DT_VCENTER = 0x00000004;
var DT_WORDBREAK = 0x00000010;
var DT_CALCRECT = 0x00000400;
var DT_NOPREFIX = 0x00000800;
var DT_WORD_ELLIPSIS = 0x00040000;
var DT_SINGLELINE = 0x00000020;

ColourTypeCUI = {
    text: 1,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};
FontTypeCUI = {
    items: 0,
    labels: 1
};
ColourTypeDUI = {
    text: 0,
    background: 1,
    highlight: 2,
    selection: 3
};
FontTypeDUI = {
    defaults: 0,
    tabs: 1,
    lists: 2,
    playlists: 3,
    statusbar: 4,
    console: 5
};

var instancetype = window.InstanceType;
var g_font = null;
var _ww = 0, _wh = 0;
var g_textcolor = 0;
var g_backcolor = 0;

function get_font() {
    if (instancetype == 0) { // CUI
        g_font = window.GetFontCUI(FontTypeCUI.items);
    } else if (g_instancetype == 1) { // DUI
        g_font = window.GetFontDUI(FontTypeDUI.defaults);
    } else {
        // None
    }
}
get_font();

function get_colors() {
    if (instancetype == 0) { // CUI
        g_textcolor = window.GetColourCUI(ColourTypeCUI.text);
        g_backcolor = window.GetColourCUI(ColourTypeCUI.background);
    } else if (g_instancetype == 1) { // DUI
        g_textcolor = window.GetColourDUI(ColourTypeDUI.text);
        g_backcolor = window.GetColourDUI(ColourTypeDUI.background);
    } else {
        // None
    }
}
get_colors();

function on_size() {
    _ww = window.Width;
    _wh = window.Height;
    _textPos = 0;
}

function GetInfoText() {
    var preferNowPlaying = window.GetProperty("Prefer now playing", true);   
    var title = "";
    if(window.GetProperty("Artist", false)) title += "%artist% ";
    if(window.GetProperty("Title", false)) title += "● %title% ";
    if(window.GetProperty("Album", false)) title += "● %album% '('%date%')' ";
    if(window.GetProperty("Codec", true)) title += "● %codec% ";
    if(window.GetProperty("Bitrate", true))
        title += preferNowPlaying && fb.IsPlaying ? fb.TitleFormat("● %bitrate% kbps ").Eval() : "● %bitrate% kbps ";
    if(window.GetProperty("Sample rate", true)) title += "● %samplerate% Hz ";
    if(window.GetProperty("Channels", true)) title += "● $caps(%channels%)";
    if(title[0] == '●') title = title.substr(2);   
    var metaDb = null;
    if(preferNowPlaying && fb.IsPlaying) metaDb = fb.GetNowPlaying(); else metaDb = fb.GetFocusItem();
    if(!metaDb) return "";
    return fb.TitleFormat(title).EvalWithMetadb(metaDb);
}

var _text = GetInfoText();
var _textPos = 0;
var _timer = null;

function StartCrawline() {
    if(_timer != null) StopCrawline();
    _timer = window.SetInterval(function(){
        _textPos -= 20;
        window.Repaint();
    }, 1000);
}
function StopCrawline() {
    if(_timer == null) return;
    window.ClearInterval(_timer);
    _timer = null;
    window.Repaint();
}
if(window.GetProperty("Crawline", false)) StartCrawline();

function on_paint(gr) {
    gr.FillSolidRect(0, 0, _ww, _wh, g_backcolor);
    if(window.GetProperty("Crawline", false))
    {
        var textWidth = gr.CalcTextWidth(_text, g_font);
        gr.GdiDrawText(_text, g_font, g_textcolor, _textPos, 0, textWidth, _wh, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT | DT_NOPREFIX);
        if(textWidth <= _ww)
        {
            if(_textPos < 0)
                gr.GdiDrawText(_text, g_font, g_textcolor, _textPos + _ww, 0, textWidth, _wh, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT | DT_NOPREFIX);
            if(_textPos <= -textWidth) _textPos += _ww;
        }
        else
        {
            if(_textPos + textWidth + 50 < _ww)
                gr.GdiDrawText(_text, g_font, g_textcolor, _textPos + textWidth + 50, 0, textWidth, _wh, DT_VCENTER | DT_SINGLELINE | DT_CALCRECT | DT_NOPREFIX);
            if(_textPos <= -textWidth) _textPos = 50;           
        }
    }
    else
        gr.GdiDrawText(_text, g_font, g_textcolor, 0, 0, _ww - 2, _wh, DT_VCENTER | DT_RIGHT | DT_WORDBREAK | DT_CALCRECT | DT_NOPREFIX);
}

function on_playback_new_track(metadb) {
    if(window.GetProperty("Prefer now playing", true))
    {
        _text = GetInfoText();
        window.Repaint();
    }
}
function on_playback_time(time) {
    if(window.GetProperty("Prefer now playing", true))
    {
        _text = GetInfoText();
        window.Repaint();
    }
}
function on_selection_changed(metadb) {
    if(!window.GetProperty("Prefer now playing", true) || !fb.IsPlaying)
    {
        _text = GetInfoText();
        window.Repaint();
    }
}

function on_font_changed() {
    get_font();
    window.Repaint();
}

function on_colors_changed() {
    get_colors();
    window.Repaint();
}

var MF_ENABLED = 0x00000000;   

function on_mouse_rbtn_up(x, y, mask) {

        var menu = window.CreatePopupMenu();   

        menu.AppendMenuItem(MF_ENABLED, 10, "Исполнитель");
    menu.AppendMenuItem(MF_ENABLED, 20, "Название");
    menu.AppendMenuItem(MF_ENABLED, 30, "Альбом");
    menu.AppendMenuSeparator();
    menu.AppendMenuItem(MF_ENABLED, 40, "Кодек");
    menu.AppendMenuItem(MF_ENABLED, 50, "Битрейт");   
    menu.AppendMenuItem(MF_ENABLED, 60, "Частота дискретизации");   
    menu.AppendMenuItem(MF_ENABLED, 70, "Каналы");
    menu.AppendMenuSeparator();
    menu.AppendMenuItem(MF_ENABLED, 80, "Предпочитать проигрываемый");
    menu.AppendMenuItem(MF_ENABLED, 81, "Следовать за выделенным треком");
    menu.AppendMenuSeparator();
    menu.AppendMenuItem(MF_ENABLED, 90, "Бегущая строка");

        menu.CheckMenuItem(10, window.GetProperty("Artist", false));
    menu.CheckMenuItem(20, window.GetProperty("Title", false));
    menu.CheckMenuItem(30, window.GetProperty("Album", false));

    menu.CheckMenuItem(40, window.GetProperty("Codec", true));
    menu.CheckMenuItem(50, window.GetProperty("Bitrate", true));
    menu.CheckMenuItem(60, window.GetProperty("Sample rate", true));
    menu.CheckMenuItem(70, window.GetProperty("Channels", true));

    menu.CheckMenuRadioItem(80, 81, window.GetProperty("Prefer now playing", true) ? 80 : 81);
    //menu.EnableMenuItem(window.GetProperty("Prefer now playing", true) ? 80 : 81, 1);

    menu.CheckMenuItem(90, window.GetProperty("Crawline", false));

    var ret = menu.TrackPopupMenu(x, y);

        switch(ret)
    {
        case 10:
            window.SetProperty("Artist", !window.GetProperty("Artist"));
            break;
        case 20:
            window.SetProperty("Title", !window.GetProperty("Title"));
            break;
        case 30:
            window.SetProperty("Album", !window.GetProperty("Album"));
            break;

        case 40:
            window.SetProperty("Codec", !window.GetProperty("Codec"));
            break;
        case 50:
            window.SetProperty("Bitrate", !window.GetProperty("Bitrate"));
            break;
        case 60:
            window.SetProperty("Sample rate", !window.GetProperty("Sample rate"));
            break;
        case 70:
            window.SetProperty("Channels", !window.GetProperty("Channels"));
            break;

        case 80:
            window.SetProperty("Prefer now playing", true);
            break;
        case 81:
            window.SetProperty("Prefer now playing", false);
            break;

        case 90:
            window.SetProperty("Crawline", !window.GetProperty("Crawline"));
            if(window.GetProperty("Crawline", false)) StartCrawline(); else StopCrawline();
            break;

        default:
            break;
    }

       menu.Dispose();

        _text = GetInfoText();
    window.Repaint();

       return true;
}

function on_notify_data(name, info) {
    if(name != "Mini view") return;
    if(window.GetProperty("Mini view", false) == info) return;
    window.SetProperty("Mini view", info);
    StopCrawline();
    if(info) {
        var prevSetting = window.GetProperty("Previous Crawline", true);
        window.SetProperty("Previous Crawline", window.GetProperty("Crawline", false));
        window.SetProperty("Crawline", prevSetting);
        prevSetting = window.GetProperty("Previous Artist", true);
        window.SetProperty("Previous Artist", window.GetProperty("Artist", false));
        window.SetProperty("Artist", prevSetting);
        prevSetting = window.GetProperty("Previous Title", true);
        window.SetProperty("Previous Title", window.GetProperty("Title", false));
        window.SetProperty("Title", prevSetting);
        prevSetting = window.GetProperty("Previous Album", true);
        window.SetProperty("Previous Album", window.GetProperty("Album", false));
        window.SetProperty("Album", prevSetting);
        prevSetting = window.GetProperty("Previous Codec", false);
        window.SetProperty("Previous Codec", window.GetProperty("Codec", true));
        window.SetProperty("Codec", prevSetting);
        prevSetting = window.GetProperty("Previous Bitrate", false);
        window.SetProperty("Previous Bitrate", window.GetProperty("Bitrate", true));
        window.SetProperty("Bitrate", prevSetting);
        prevSetting = window.GetProperty("Previous Sample rate", false);
        window.SetProperty("Previous Sample rate", window.GetProperty("Sample rate", true));
        window.SetProperty("Sample rate", prevSetting);
        prevSetting = window.GetProperty("Previous Channels", false);
        window.SetProperty("Previous Channels", window.GetProperty("Channels", true));
        window.SetProperty("Channels", prevSetting);
        prevSetting = window.GetProperty("Previous Prefer now playing", true);
        window.SetProperty("Previous Prefer now playing", window.GetProperty("Prefer now playing", true));
        window.SetProperty("Prefer now playing", prevSetting);
    }
    else {
        var prevSetting = window.GetProperty("Previous Crawline", false);
        window.SetProperty("Previous Crawline", window.GetProperty("Crawline", true));
        window.SetProperty("Crawline", prevSetting);
        prevSetting = window.GetProperty("Previous Artist", false);
        window.SetProperty("Previous Artist", window.GetProperty("Artist", true));
        window.SetProperty("Artist", prevSetting);
        prevSetting = window.GetProperty("Previous Title", false);
        window.SetProperty("Previous Title", window.GetProperty("Title", true));
        window.SetProperty("Title", prevSetting);
        prevSetting = window.GetProperty("Previous Album", false);
        window.SetProperty("Previous Album", window.GetProperty("Album", true));
        window.SetProperty("Album", prevSetting);
        prevSetting = window.GetProperty("Previous Codec", true);
        window.SetProperty("Previous Codec", window.GetProperty("Codec", false));
        window.SetProperty("Codec", prevSetting);
        prevSetting = window.GetProperty("Previous Bitrate", true);
        window.SetProperty("Previous Bitrate", window.GetProperty("Bitrate", false));
        window.SetProperty("Bitrate", prevSetting);
        prevSetting = window.GetProperty("Previous Sample rate", true);
        window.SetProperty("Previous Sample rate", window.GetProperty("Sample rate", false));
        window.SetProperty("Sample rate", prevSetting);
        prevSetting = window.GetProperty("Previous Channels", true);
        window.SetProperty("Previous Channels", window.GetProperty("Channels", false));
        window.SetProperty("Channels", prevSetting);
        prevSetting = window.GetProperty("Previous Prefer now playing", true);
        window.SetProperty("Previous Prefer now playing", window.GetProperty("Prefer now playing", true));
        window.SetProperty("Prefer now playing", prevSetting);
    }

    _text = GetInfoText();
    if(window.GetProperty("Crawline", false)) StartCrawline();
}

Понравилась статья? Поделить с друзьями:
  • Ошибка недопустимое устройство d при установке epic games launcher
  • Ошибка не удалось получить доступ к сайту
  • Ошибка недопустимое слово на авито
  • Ошибка не удалось получить данные делимобиль
  • Ошибка недопустимое имя эксель