<bgdev />free

Вход Регистрация

Консултации по енджина - JS - нотификации.
0

0 1 2
#693 (ツ) stewie
Създадено на 25.07.2020, видяно: 1453 пъти.

Защо? Нали джсто трябва да прочете от базата дали първо юзъра е енейбълнал нотификациите, какво общо има wantedevents, евенти не се взимат ако тоя флаг е false за юзъра.

#699 (ツ) johnfound
Създадено на 25.07.2020, видяно: 1724 пъти.
stewie

Защо? Нали джсто трябва да прочете от базата дали първо юзъра е енейбълнал нотификациите, какво общо има wantedevents, евенти не се взимат ако тоя флаг е false за юзъра.

JS-та ще знае дали потребителят е разрешил или забранил нотификациите според това дали чекбокса е чекнат или не. Той има достъп до него – няма никаква нужда да гледа в базата данни и да комуникира с бакенда.

А виж, какво ще е началното състояние на чекбокса и как точно ще се пази то е друг въпрос. Лично аз не съм много сигурен как трябва да се направи.

Единият вариант е да се направи на бакенда – в профила на потребителя и съответно като се рендира страницата да се сетва чекбокса в нужната стойност.

Другият вариант е да се използва сесионно куки на фронт-енда - което да се създава от JS-та при превключване на чекбокса. И съответно това куки да се гледа пак от бакенда при рендиране на страницата. Това ще направи тези сетинги валидни само за текущата сесия, което не е лошо само по себе си.

#703 (ツ) stewie
Създадено на 25.07.2020, видяно: 1453 пъти.
johnfound
stewie

Защо? Нали джсто трябва да прочете от базата дали първо юзъра е енейбълнал нотификациите, какво общо има wantedevents, евенти не се взимат ако тоя флаг е false за юзъра.

JS-та ще знае дали потребителят е разрешил или забранил нотификациите според това дали чекбокса е чекнат или не. Той има достъп до него – няма никаква нужда да гледа в базата данни и да комуникира с бакенда.

А виж, какво ще е началното състояние на чекбокса и как точно ще се пази то е друг въпрос. Лично аз не съм много сигурен как трябва да се направи.

Единият вариант е да се направи на бакенда – в профила на потребителя и съответно като се рендира страницата да се сетва чекбокса в нужната стойност.

Другият вариант е да се използва сесионно куки на фронт-енда - което да се създава от JS-та при превключване на чекбокса. И съответно това куки да се гледа пак от бакенда при рендиране на страницата. Това ще направи тези сетинги валидни само за текущата сесия, което не е лошо само по себе си.

Ама аз през цялото време това имам впредвид - в таблицата с потребителите където пазиш език на интерфейса, тема, пароли и прочие да се сложи един бул филд notificationsEnabled или подобно. Реално точно JS-а трябва да достъпи таблицата за юзъра през съответният ти екшън на контролера (или както там се нарича при теб) за да провери в реално време дали този чекбокс е натиснат или не. Чисто дизайнерски не виждам проблем над Език на интерфейса да се сложи тоя чекбокс.

#717 (ツ) johnfound
Последно редактирано на 25.07.2020 от johnfound, видяно: 1704 пъти.
stewie

Реално точно JS-а трябва да достъпи таблицата за юзъра през съответният ти екшън на контролера (или както там се нарича при теб) за да провери в реално време дали този чекбокс е натиснат или не. Чисто дизайнерски не виждам проблем над Език на интерфейса да се сложи тоя чекбокс.

Нещо май говорим за различни неща. Аз говоря за чекбокс, който да се намира на всяка страница на сайта - в главният интерфейс (този със черните бутони) и откъдето по всяко време да можеш да си пуснеш и спреш нотификациите.

Настройките във профила на потребителя са ясни как ще се направят и там да – трябва да е през бакенда, но няма нищо трудно да се добави още една опция.

#721 (ツ) stewie
Създадено на 25.07.2020, видяно: 1453 пъти.
johnfound
stewie

Реално точно JS-а трябва да достъпи таблицата за юзъра през съответният ти екшън на контролера (или както там се нарича при теб) за да провери в реално време дали този чекбокс е натиснат или не. Чисто дизайнерски не виждам проблем над Език на интерфейса да се сложи тоя чекбокс.

Нещо май говорим за различни неща. Аз говоря за чекбокс, който да се намира на всяка страница на сайта - в главният интерфейс (този със черните бутони) и откъдето по всяко време да можеш да си пуснеш и спреш нотификациите.

Настройките във профила на потребителя са ясни как ще се направят и там да – трябва да е през бакенда, но няма нищо трудно да се добави още една опция.

Мда определено различни визии имаме. Все пак тоя чекбокс трябва да пише някъде, иначе къде ще му запазиш стейта ? Апропо на мобилната тема анкора за unread въобще не е имплементиран. Хората се подлъгват от другите теми.

#725 (ツ) johnfound
Създадено на 25.07.2020, видяно: 1691 пъти.
stewie

Мда определено различни визии имаме. Все пак тоя чекбокс трябва да пише някъде, иначе къде ще му запазиш стейта ? Апропо на мобилната тема анкора за unread въобще не е имплементиран. Хората се подлъгват от другите теми.

За нотификациите започнах да пиша нещо във бакенда и става горе долу нормално. Дай утре по някое време да продължим темата - ще ми е по-ясно, а може да имам и нещо готово вече с което да се работи.

А това за мобилната тема не го разбрах. За връзката към първото непрочетено мнение ли говориш, или за нещо друго? И коя мобилна тема? "mobile"?

#726 (ツ) stewie
Създадено на 25.07.2020, видяно: 1453 пъти.
johnfound
stewie

Мда определено различни визии имаме. Все пак тоя чекбокс трябва да пише някъде, иначе къде ще му запазиш стейта ? Апропо на мобилната тема анкора за unread въобще не е имплементиран. Хората се подлъгват от другите теми.

За нотификациите започнах да пиша нещо във бакенда и става горе долу нормално. Дай утре по някое време да продължим темата - ще ми е по-ясно, а може да имам и нещо готово вече с което да се работи.

А това за мобилната тема не го разбрах. За връзката към първото непрочетено мнение ли говориш, или за нещо друго? И коя мобилна тема? "mobile"?

Окей, свиркай ако искаш нещо за JS-a. Точно за непрочетените мнения в темата "mobile". Като я сравня с дефолтната в нея няма анкор към <име на тема>!markbyid или нещо таковa беше (нямам непрочетени в момента за да видя пътят). Всъщност в wwwroot къде е дефолтната тема ?

#727 (ツ) johnfound
Последно редактирано на 25.07.2020 от johnfound, видяно: 1680 пъти.
stewie

Точно за непрочетените мнения в темата "mobile". Като я сравня с дефолтната в нея няма анкор към <име на тема>!markbyid или нещо таковa беше (нямам непрочетени в момента за да видя пътят). Всъщност в wwwroot къде е дефолтната тема ?

Ето тука е: templates/mobile/thread_info.tpl : 58 - за тази връзка се използва иконката "съобщение", която, когато е сива, значи, че няма нови мнения, а когато е жълта, освен че показва, че има нови съобщения, е и връзка към първото непрочетено мнение. Има и закачен хинт, да изскача, но на мобилен телефон едва ли се вижда.

Но явно това е страшно не интуитивно – всички се оплакват, че нямало такава връзка... Но честно казано, тази тема е разработвана много, много отдавна и въобще не ми се връща към нея да я мисля как да се оправи...

#736 (ツ) stewie
Създадено на 26.07.2020, видяно: 1453 пъти.

Идея. Трябва да намеря в темплейтите секцията, която рендерва червените бутони. Слагам чекбокс. onClick съответно слагам/махам куки. connect() в events. js съответно проверява има ли го или не и тогава дърпа нотификациите. По този начин не се изгубвам в неразбираемият за мен асемблерски код. Какво ще кажеш? Реално докато юзъра не си изчисти кукитата няма проблем и ще се сторне до следващ логин. Пробвах и Sql конзолата със select from tablename limit 10,с имена на таблици, които виждам в asm-тата. Нищо не ми връща.

#737 (ツ) Дон Реба
Създадено на 26.07.2020, видяно: 1660 пъти.

най-нормалното което всеки ще търси първо е нотификациите да се изключват от профила сега ясно че форума може да се чете и от нерегистрирани,ама какво ги мислите тях

#739 (ツ) johnfound
Последно редактирано на 26.07.2020 от johnfound, видяно: 1653 пъти.
stewie

Ок, мобилната тема се брои за отсвирена. Идея. Трябва да намеря в темплейтите секцията, която рендерва червените бутони. Слагам чекбокс. onClick съответно слагам/махам куки. connect() в events. js съответно проверява има ли го или не и тогава дърпа нотификациите. По този начин не се изгубвам в неразбираемият за мен асемблерски код. Какво ще кажеш? Реално докато юзъра не си изчисти кукитата няма проблем и ще се сторне до следващ логин. Пробвах и Sql конзолата със select * from tablename limit 10,с имена на таблици, които виждам в asm-тата. Нищо не ми връща.

Да, горе-долу и аз така го виждам... Допълнително има плюс, че на различните устройства и браузъри юзера ще може да има различни настройки.

Даже се чудя дали не е добра идея и изборът на скина да се направи така...

А за таблиците в базата данни - виж схемата на базата: source/create.sql

Има таблици, които може и да са празни още, а има и такива от които постоянно всичко се изтрива - например буфера на евентите.

ЕДИТ: А да, бутоните за черната навигация (глобална) са във файла main_html_start.tpl

#740 (ツ) johnfound
Създадено на 26.07.2020, видяно: 1650 пъти.
Дон Реба

най-нормалното което всеки ще търси първо е нотификациите да се изключват от профила сега ясно че форума може да се чете и от нерегистрирани,ама какво ги мислите тях

От една страна си прав, но от друга, хората се оплакваха от нотификациите главно на мобилни устройства. Тоест ако го напрвим със профила, юзера ще трябва да го включва и изключва всеки път като влиза от различно устройство. А по-вероятно когато влезе първият път от мобилно устройство ще го изключи и повече няма да го включи. Така накрая никой няма да я ползва тая функция. А тя е тип "социална" - увеличава ангажимента на участниците.

#744 (ツ) 40oz
Създадено на 26.07.2020, видяно: 1634 пъти.

Откъм социални функции ще е готино да можеш да лайкваш мнения. Иначе нотификациите са доста дразнещи, по-добре да могат да се спират глобално за юзър, а не за устройство. Предполагам повече от потребителите са на мобилни така или и аче, но там основния проблем е писане на мнения където редактора е почти неизползваем.

#745 (ツ) johnfound
Създадено на 26.07.2020, видяно: 1628 пъти.
40oz

...но там основния проблем е писане на мнения където редактора е почти неизползваем.

Определено направих всичко възможно да направя редактора максимално компактен и поне отчасти удобен за мобилни потребители. Аз самият не ползвам интернет през телефона, така че може и да не съм се сетил за нещо. Но пък приемам предложения от недоволни. Обаче поне малко по-конструктивни от "редактора в почти неизползваем".

#746 (ツ) Евлампи
Създадено на 26.07.2020, видяно: 1618 пъти.

За нотификациите има и една друга възможна линия - да се шибнат в компонент-контейнер който вече с цсс и джс да се дресира и като размери и като поведение. Оттам параметрите на дресировката може да се шибат в локал сторидж или направо юзърските преференции на сървъра.

Впрочем как става разпознаването дали отсреща има десктоп или мобилна чекия? Мобайл сафари на айпадос се репортва като десктоп сафари на макос обаче и на айпад нотификациите ме настъпват леко по пръстите особено като е малко повече почитаемата аудитория

#747 (ツ) Евлампи
Създадено на 26.07.2020, видяно: 1623 пъти.

А, сега се сетих и за друго, какви са ограниченията на браузърския дев/рънтайм откъм дипендънсита? Цеесеса се компилира от лесс при билдването обаче джаваскрипта е ванила, до каква степен може да се добавят/променят дипендънсита (след надлежно обсъждане разбира се)?

Също какво е съпортваното дъно за браузър, само Зафода ли участва от ИЕ6 :)

#748 (ツ) stewie
Последно редактирано на 26.07.2020 от stewie, видяно: 1453 пъти.

Джон, прилагам ти два файла тук. В main_html_start.tpl съм сложил един анкор. Чекбокс не може да съществува до бутоните, понеже цялото разпъване/свиване на този див е направено с чекбокс и други не могат да се рендерират.

Затова съм сложил ето тази селяния

<a href="javascript:switchNotificationCookie();" class="btn">Enable/Disable Notifications</a>

Вече там с локализацията ти ще си я бараш. В realtime.js съм направил следните промени:

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

Прилично откраднати от W3Schools.

Този нов метод :



function switchNotificationCookie() {
	var cname = "notificationsEnabled";
	
	if(getCookie(cname) == "true") {
		setCookie(cname, "false", -1);
	} else {
		setCookie(cname, "true", 365);
	}
}

И промяната в connect() :


function connect() {
  if (source) disconnect();
  
  if (getCookie("notificationsEnabled") != "true") return;
  
  source = new EventSource("/!events?events=" + WantEvents);
  StartTime = Date.now()/1000;
  listSourceEvents.forEach( function(value) { source.addEventListener(value.event, value.handler) } );
}
#767 (ツ) stewie
Създадено на 26.07.2020, видяно: 1453 пъти.
Elim Garak

Напротив - табовете са грешни, защото много тулове и ИДЕта могат да форматират сами кода, и имат опция за максимална дължина да реда. Като си сложиш на себе си таб с различна широчина от тази, която ползват другите от екипа и форматирането почва да се намазва.

Това беше преди. Сега има конфиг файлове, които идетата четат и прилагат като форматиране. Също и при чекин в репото има тулуве.

#792 (ツ) johnfound
Създадено на 27.07.2020, видяно: 1547 пъти.

Така, тествах го. По принцип работи. Но има няколко забележки:

  1. Мястото на бутона трябва да е малко по-долу. Аз го преместих, така че няма проблеми. Но, има чисто дизайнерски проблеми:

    • Добре е бутона да е с икона, а не текст - твърде много място заема, а на другите езици още повече. Аз мога да я нарисувам, но изобщо не мога да се сетя как да изглежда. Ще мисля, но и предложения са добре дошли.

    • Добре е бутона да има индикация в какво състояние са нотификациите. Самият вид ще е в CSS-а, но от JS трябва да се превключат класовете при смяна на състоянието.

  2. По кода - в switchNotificationCookie трябва да се вика connect() за да ъпдейтне връзката:

  3. function switchNotificationCookie() {
      var cname = "notificationsEnabled";
    
      if(getCookie(cname) == "true") {
        setCookie(cname, "false", -1);
      } else {
        setCookie(cname, "true", 365);
      }
    
      connect();
    }
    
  4. Следващото е козметика, но малко дразни: notificationsEnabled всъщност съществува само със стойност "true". Вместо "false" ти го изтриваш. Това е само по себе си OK и много даже елегантно. Но защо тогава кукито трябва да има някаква стойност и да се проверява за нея? По-добре да се гледа не стойността а самото му съществуване.

  5. Струва ми се, че състоянието по подразбиране трябва да е "включено" иначе, потребителите ще го включват чак когато разберат че има такава функция.

  6. Firefox-а ми дава някакво предупреждение в конзолата за това куки, но не знам какво значи:

  7. Firefox

    Cookie “notificationsEnabled” will be soon rejected because it has the “sameSite” attribute set to “none” or an invalid value, without the “secure” attribute. To know more about the “sameSite“ attribute, read https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite 127.0.0.1:8090:431:2

    Някаква идея какво значи това?

#798 (ツ) Elim Garak
Създадено на 27.07.2020, видяно: 1540 пъти.

хрома иска sameSite атрибут на кукита, иначе ги реже, явно и ФФ ще го вкарват

0 1 2

Консултации по енджина - JS - нотификации.
0

AsmBB v3.0 (check-in: a316dab8b98d07d9); SQLite v3.42.0 (check-in: 831d0fb2836b71c9);
©2016..2023 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE