From 2790a7b9cfa9f2ae9105d4f449804aedbbc40c19 Mon Sep 17 00:00:00 2001 From: ioanna-m Date: Sun, 8 Jun 2014 15:28:25 +0300 Subject: [PATCH 1/4] Feature: Emoticons + Links We have added the ability to use emoticons during chat. We have also added the ability to turn raw text urls to fully functional links that open in a new tab when clicked. --- client/emotes/Makefile.am | 26 +++ client/emotes/Makefile.in | 373 +++++++++++++++++++++++++++++++ client/emotes/face-angel.png | Bin 0 -> 992 bytes client/emotes/face-crying.png | Bin 0 -> 1027 bytes client/emotes/face-devilish.png | Bin 0 -> 1020 bytes client/emotes/face-glasses.png | Bin 0 -> 1008 bytes client/emotes/face-grin.png | Bin 0 -> 1016 bytes client/emotes/face-kiss.png | Bin 0 -> 919 bytes client/emotes/face-monkey.png | Bin 0 -> 784 bytes client/emotes/face-plain.png | Bin 0 -> 978 bytes client/emotes/face-sad.png | Bin 0 -> 992 bytes client/emotes/face-smile-big.png | Bin 0 -> 1014 bytes client/emotes/face-smile.png | Bin 0 -> 986 bytes client/emotes/face-surprise.png | Bin 0 -> 984 bytes client/emotes/face-wink.png | Bin 0 -> 983 bytes client/pfc-core.js | 2 +- server/container/messages.php | 46 +++- 17 files changed, 444 insertions(+), 3 deletions(-) create mode 100644 client/emotes/Makefile.am create mode 100644 client/emotes/Makefile.in create mode 100644 client/emotes/face-angel.png create mode 100644 client/emotes/face-crying.png create mode 100644 client/emotes/face-devilish.png create mode 100644 client/emotes/face-glasses.png create mode 100644 client/emotes/face-grin.png create mode 100644 client/emotes/face-kiss.png create mode 100644 client/emotes/face-monkey.png create mode 100644 client/emotes/face-plain.png create mode 100644 client/emotes/face-sad.png create mode 100644 client/emotes/face-smile-big.png create mode 100644 client/emotes/face-smile.png create mode 100644 client/emotes/face-surprise.png create mode 100644 client/emotes/face-wink.png diff --git a/client/emotes/Makefile.am b/client/emotes/Makefile.am new file mode 100644 index 00000000..cee11caf --- /dev/null +++ b/client/emotes/Makefile.am @@ -0,0 +1,26 @@ + +size = 16x16 +context = emotes + +iconsdir = $(themedir)/$(size)/$(context) + +icons_DATA = \ + face-angel.png \ + face-crying.png \ + face-devilish.png \ + face-glasses.png \ + face-grin.png \ + face-kiss.png \ + face-monkey.png \ + face-plain.png \ + face-sad.png \ + face-smile.png \ + face-smile-big.png \ + face-surprise.png \ + face-wink.png + +EXTRA_DIST = \ + $(icons_DATA) + +install-data-local: install-iconsDATA + (cd $(DESTDIR)$(themedir)/$(size) && $(ICONMAP) -c $(context)) diff --git a/client/emotes/Makefile.in b/client/emotes/Makefile.in new file mode 100644 index 00000000..be80cdb8 --- /dev/null +++ b/client/emotes/Makefile.in @@ -0,0 +1,373 @@ +# Makefile.in generated by automake 1.10.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = 16x16/emotes +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(iconsdir)" +iconsDATA_INSTALL = $(INSTALL_DATA) +DATA = $(icons_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONVERT = @CONVERT@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +ICONMAP = @ICONMAP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SVGCONVERT = @SVGCONVERT@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +themedir = @themedir@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +size = 16x16 +context = emotes +iconsdir = $(themedir)/$(size)/$(context) +icons_DATA = \ + face-angel.png \ + face-crying.png \ + face-devilish.png \ + face-glasses.png \ + face-grin.png \ + face-kiss.png \ + face-monkey.png \ + face-plain.png \ + face-sad.png \ + face-smile.png \ + face-smile-big.png \ + face-surprise.png \ + face-wink.png + +EXTRA_DIST = \ + $(icons_DATA) + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu 16x16/emotes/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu 16x16/emotes/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-iconsDATA: $(icons_DATA) + @$(NORMAL_INSTALL) + test -z "$(iconsdir)" || $(MKDIR_P) "$(DESTDIR)$(iconsdir)" + @list='$(icons_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(iconsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(iconsdir)/$$f'"; \ + $(iconsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(iconsdir)/$$f"; \ + done + +uninstall-iconsDATA: + @$(NORMAL_UNINSTALL) + @list='$(icons_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(iconsdir)/$$f'"; \ + rm -f "$(DESTDIR)$(iconsdir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(iconsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-data-local install-iconsDATA + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-iconsDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-iconsDATA \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-iconsDATA + + +install-data-local: install-iconsDATA + (cd $(DESTDIR)$(themedir)/$(size) && $(ICONMAP) -c $(context)) +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/client/emotes/face-angel.png b/client/emotes/face-angel.png new file mode 100644 index 0000000000000000000000000000000000000000..d2c5e940df52406a6fdb2289da426cbbf6052404 GIT binary patch literal 992 zcmV<610Vc}P)Mh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00S&ZL_t(I%WaZdY?E~u#()3s(Dv(Cx3Ud4%Gg+pjLkTa+36f)5_C)^ z*&+$aoFp0#i5D33!gy;U(ZrZ&6hmTS6e9*vF6M5$AkhI66kSGE)R9T6O(|Wwp84AE z@b_YDiHG0Sd-3LZ-n`EvxJ~?{9Yd;L-EZjeJ+7lPNLLGhP^DCDp~_s@3eAG@OTfEu zwzl@KIWbHEKmg32dGk<{JNb#&wH=T9JKow1|3{(p0OI?L6g@relTR#Ek%e29WZOo^G6)dRp%_Ft+A_ z=s%pDlAxMaa2E2|OBu@gy)$qF0PVN89&K?`8Lxl$QMAgBFt-5J1Zrs(0I974i5E+U^E?r&OOb3V9Z5NXaMj3$KczkR+0#|7I)R!YcX9Q>Uu&&`ld zXZLS=?&C>Cn3)5C?m=Y!630IOnX8K#gy!Mkv+oeO7U#92CqY$-ET;J2%Q<9fhCpW@ zIJZUsG^LPvT&v%Vo4iO*R~sizO|uyNibLbO>FV6fLw%hbeBoU>HZ}0%&|Tn`QR~}K z3fbY6CtB4uq4+@B4D`0MbKpMEJS+LQE+dchvTv{lDg|UAj?Cr|ngNd8ypogdiAuW& zRvBp(kyaTj6D$jC3+xJ5C8U`JGmEq;NUH=w$pUC@P2jAx9J@2V6yx+4$MJcF+11}o zsHG9JVxdZlWMYZqCug{$wVPL8d++rL%m*UpVD9PD#=Q@u}?p$l4RE?Jt)8F-M92n{F`@4~Uo<}-YupJ*#N(4Gp z|2yTiryUF)W<1PgyZ93EFb`%%!9)+cOb__7muL+`*ur8NleZFHTgIRR z+VXGzZ_o31SWKqB^EbcShs5J?Ji6Cf@)}Xun=UG1Qc>FgfN=A!EoefT&Ntspl+Qle zlYbAs{iMe?a^>QCQpoos`=V-9-7Z>ISp^V^(&i>M(iw4UaM0Y|+B~xoxY;{A92Wqf zXqtx3&MQLz5Bou55m>di!Z z0Dzuo$!m(I;#_mv0aYLR9P4XKICXvm+i-)ZWuR&q=ngM_{pB_;FSLUji|C9U_qg4@ zbDh=e8Z|859ggf*`OHt?dK#y{UO_Hzz(ob5D!3hE z94zdu48h!3fQwb)^`jbYST7+v|1)Zw0*H$tH50(gCr_a z^Qq*)r&t9(n~x(`cMSKJZz1u=5~lAv@Oc>`dpvl1uf*w(O7JriPqcGnCPrY|_BgWz zNld3w2MqS4a@&gH%<&FWl~6bbu`QrvK^868+XgQDrRbX`Ia~1T9bf>k z>$z0#@}CW_v^tmCW7TWEX2pV&BOpuxC;@~7cR1z?3cjBU>06ePY`d}8I~;F*Xd#`} zWb47v{>*I9oXGhPrHcw#GYGY8jt50xEbGSa_x#R4I%w!zIU62YerGuT5EJ=7XEpz~ x#wh8gM8<@qVE|Bw80V5C93lJ6^49-w{s$-Bogi;?nm_;m002ovPDHLkV1hFU+2H^H literal 0 HcmV?d00001 diff --git a/client/emotes/face-devilish.png b/client/emotes/face-devilish.png new file mode 100644 index 0000000000000000000000000000000000000000..6edf68359e0a690fb669427b955db1627ea0f23e GIT binary patch literal 1020 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 literal 0 HcmV?d00001 diff --git a/client/emotes/face-monkey.png b/client/emotes/face-monkey.png new file mode 100644 index 0000000000000000000000000000000000000000..69db8fa5b5e06ac699018e5c702ca91c8c532018 GIT binary patch literal 784 zcmV+r1MmEaP)L zli!O}br{A!@AsUUvvcN*PRoj2bd{Sd&NeBNKgtoI$b@CrRd8V!1(&)>D!MAN#r}YZ z2&9X;sBZE?K^>w+DXC>41BYZ+*I7!CwJsuQnVoZX&+MG@eZ5h!jDmVDUmiX@ygZMn zD*s3BUk^i-;9$n^l0tuKS?>t9jWC~B&ROKcTD@f-^vk^jLzRN-h<@T4M#?>_e$lh! zGsJok4)?gtUXM#yru#4H0qn5AH1$ z*5pqBn07m^RLi{p_{B#7%kcOF!{ZZZXNBP-$Jlq|7-<~hukAq_4_|4`p$PxJ>I?cnLVR2H#f_{ z!51m`KAI+In$T=EIX!ui{!*E#3#WAMmu9mW+1*o(aKL7t^BLREQobBQf|8?Z||@EY}#5i93I-kp@HX! zqKL2+;(IQ+j0-j;o9W`#!cB}YfA(@q@AtqepMEv{V|1f&1;_6})!>QJ-R06HASO$8 zT`xcXG{-lWuSKeS_D~b|Rf3};^4{L+HgCuFs?+_*IpR+b|c|M;Eh@2BjA=}RjL zZ`SJJM-Kt+*0~RK)WCLyeueb{zX@Em@B_%nTD{fy+b#T8nSZzZv+e+GZy^;e&C$XD O0000`x zJ12+6u1#KfHJLUxg)}xnY@)*r%;*W3q#*{zUTbk3_tMet`bzt$#hZnKr47rnxR~vF zzyH+ewb65<3GdVDlpPB}=+~G&6GM zTs+EuL*x`_G(*-N+U)F9&^iJ%TloW4HmZaQv{OXwe#ga$$#|r~8R_}KR9jb{^b2owO!TKvN!I z0+Hta`bO0BSTKE8&u?y*-t9S|Qo}-^Z5tJ?5tbieWRD{ZiSis&^AP1YC{IxKBEDUI z;vGfI8`=IBE3LZh?^gYZj#xF8mSFpuV%2ARx5RFtMBR2!u8;OYl;iU0uZC0g#EnMc zg>ozHtLq1+P=Il3(<>5Pz=l-=& zC|G*v!o8cttqyP9Zk;SN4YBVE=?4)9O}Jl<@%qN$lkso%iFHQfAN&KI4 zy#By4rI?XIPbn=&01Tm4BP|v}rRTlO(0@4p1+2fg2-5Q2n*aa+07*qoM6N<$g3iOt Ap#T5? literal 0 HcmV?d00001 diff --git a/client/emotes/face-sad.png b/client/emotes/face-sad.png new file mode 100644 index 0000000000000000000000000000000000000000..159c04b0c64e57abd9a7429e67454b66155caff9 GIT binary patch literal 992 zcmV<610Vc}P)`Sv8ACgeKwlRq}Wtz znzoEkoVuwXbSFr<5EpKY3tfnob|DBxP!}SoRSIqu;-YRE3~6F0m^keuF;P3oOrps+ z-}651d-q-!qEyfN&)NM*E|6g z4!(GID!O>{lh>3~Z;YN8Gm`xWX}Bv15DKSOL$y?vOLKExyIy;1r~8NLg@v310L`*2 zjE~=>vgpiP$Dg`%^6Ystf&$UBHGr%^1*>3U3sHlTp(mdYxgGbM^Q*ehJv4W{RI(HW zfPv=tRNvvj%;3=@I$!@7Gjq$(x((32K9E!jB&p+rFK2-ASD45>V;&uTd@NEPn*soO zX}D==X5#9j=~G5${(bE4ZQ+$`i)cd!F~Xom7>Gvk(T)39-Sr^6BF3}Nnz|mnI(}f^ zqAnMcnbDJm`1xCiP6@Anx`Rg3MTkl$B>)gm!Vn2-c=_#H;H4$Vt?zJl;*23=Fv&db zXOpRZ%2&PyjYZ(H9$dUI2*YoII1Gg8AfCYabH`BpJqEXU8;qoo8hDXP;b)lu%S5_T z@T&I_VqJLiITP_-4Qg)}ig!Rl4AK+0b~%Q%pZ39208uX@K6VIRKr)Q`5}oP}s2@PI zTdMdFD$pyS}k;syCL<5_T2&ii@_HK<`8S zcx=o*1Rrq#|PxP>=o`gV%D40|sOcgXCKzt53 z9LnbK+b%x*QR~z^a;0S+o1p-3@QID-HfPJ<>>Tdgsp+UUeFO~$LEQmb4$yER8V-J` zNW7Czb@ps+IsJWc`d;nBQh@(nGK}++>4L=hx1=w?3}uCTHgr( O0000+k~X#73UR$7+BQP5vu15w zpUnEO$wW|?A{{v2RZw4~ih^I$!9YP!2X21hgAXDMM1w_JYjLgJ+RVmw%Wk^0O>&d0 z_vYT*`@er5RG6OU!+APClF4LndmitvE5yf7c&IxenQssPh_Ei%F3n2I`RLqAIDdPe z{5z0NU!Z;Z=rjIs^p&BJ`+bq#Zt8E30ED8UX{e}0cYbEZ+O29YZAO22XLdH@0svDK z1?lt!s_dqJ>>D_6eC+T;{vgW{%5nh7K{~78qJXfUk^Kjbc}(4Wps_9wN0T#WRaKEp zQ51}~#h*o54Bi-yblDb;N2adu?`>@1Yr(DJrB1ykHp|4uiY}^TArF4wZPBp z#iMb><8S-&(1Q>A&4qW7FKKw=s}h3o2<}YwfN+jnzJk|I{RW?`qetYB7=D8Pe(~aX zC#!xz&8C=2-81YHYu`fXD$ajjL8WTp&9~+tr2ruD>G{j3R4u&z$tI*;gnRuvjE|1_ zgzHRkt7%U};=Q!F^ff?Sy!==UJkbrlw-=;Q2jLX2zL0`*GX_z-346N+XKNAh#FNw& z_5>H;sX%)iR^=)L;Sj_?AXo+Sa>%9*!YSNF1I|trjZFjYt_>!xA$)HSEQh3c({`a( zHX#iMb7ypjt^l~Hf;4iVT)-6)u1!FKt#G^?Emj$$&qpDQ8f?b}H%)VSV{P%^et#SM z(H)c?c@%v|j-bE4AMIW*ASHMxgoT9#EPehNIel42~2TzksCW8cDf3AgC)06Q+Fxg7c z(z6ddx(7`=2| z8jNh4gf?w~vH>iWy!hcp$oWQ%nYv)psh_T&oXz}=iTt0luYOtKluS_~CtOKW0Kka5 kEF{S~uKd^v5B!JoUk@vwRe4P)+7g)*?1z9#Ng;{oCc6MGL z4@Oh{oxl0rK4M~Gf@k-}$*L&~{mqz+#*}6Z0Ep0i=tpu!xxtrTuQabe+lzk=Mn-PQ z9y|A5vbl9?=UJKK?M?T|_#v;c3v0Hp=G2QKNAgL<~SF6)0(8t%x~PgYGW z(K2=FftUY{9h;mjMeW{{^}6ONn?qH8pbNsVVDTI63&@ z86zxwOK2B4s0BP+tFWS2=@l0M zMT0KUC8YH_!l@#>L(&OF!jQz24?yr_iEL+=j6#1*577r3(pg+<13i;OD8VOhALpp3 zpq?s3EKc8Zl8@f$CUQMg5E524X+GVF8;C*O^CN7lgnbwg(>*dx2jsdNh<5i7^%_x3 zM+I=9R}k)d>{=dP)#q5Pf*(X^=U!;NoN0=6b=Eg2?AR=9_}ET>8T zExwzt(kKFYjTTNq6-w2ofL4&ccox{)9*0{qe-ue})Pmnba-*))) zH_a});`%}2`I{1;W4JJV=;=$}l#bbpR*Zv+i*{fm_p8Y2K8Eces}37`As^q*+B-FE zY2fze^uHF0MN{>kyL)4Mz0F;zG>#T+DRv!X7z9-6isijHKa^6z&8@b&9ctGHf8M$_ zH}N+n@qf-nb=lOVn3O_|MM@3=Xd-$LDlrp8>MOUo|394n0%O;r7_9A!9smFU07*qo IM6N<$g5yxd?f?J) literal 0 HcmV?d00001 diff --git a/client/emotes/face-surprise.png b/client/emotes/face-surprise.png new file mode 100644 index 0000000000000000000000000000000000000000..4b4d423a555be4dec700187848006923fdd01a18 GIT binary patch literal 984 zcmV;}11J26P)Eyz~ggTTZFd-p^vLJ>=gn@}Hohm-UzyKo*g$jhCSRtUGDj_t1+9XY5J9UEW_|E6M z_r3Rn0U;H5=D(ipNAmeR9^ETrj!i7{)efp=v|*hA03zA1p`uHgiBCS;>MlLnlYb6! zx!d%lH+3!6otmFGf5A!)_tRJ+2@s0SJKI<(+|f^TI6>>UalM-QX<>CWuK>WXZ5z4V zZECl2%O_8tyL$2ROR@dE719|iArdJxf$xX+@vz80<|x@9*f#snNox<+7~} z+qN;?lYZ;T(TS@QXD6axEWQU<)^Tcb7*<~zh{r(;fs|22%q?Mb;ziT-c)C%d!EUqj z2m11uV;j+)`SE8jMQeo{7#mTToa{qqZx4tS1GQp6JdVRQMPJH;D1MBoOD{wtk@$S> z#F0${E@!jPoV8@}7Gm-MqeBtA_Vyae`^V5)0?_zn;~`#u=VuT~puGyz{&$$3x@buy zW+~(0Ofo%8d3g;43f$*-SZkwPJOJ?>5Z*#%=Loe!9|$=BK-AWe9vG%dhBH*c%yuTy z5cT_jkT8@$U&6#-lmTu8#7kf(VW2N*Krs$2BxGX`-H#7|36eE=sNmJBprL>Y4XA+Q zqc{68m`s7_42ba*#_c+8yitMjeJC!VLIK%sA`}W{5CogM#r5Y-nLW_Vh4L6u2@274 zQTT8Hk)(wSSEg~o3?N$!%I6?P0+p>F!NPFU3>8`Wy;wZo+tp(v{5nVngER;#g$*o! zH&^SP$Hbgt*(C}9{pX4cEpD!VRUPuy8WA*{5Jo8Q!OiRV{L5RAjbn(Wk3arY zcz-kP9kz}2Gs}Am|HE`|DRWI}^=>BaMn>X+Ir5kU)xbg9!2Omb?jCn>1@Te5 z|HefA%h_`7+9oBll;|0yX%+wsqBf-_OG4>I)_wY4oc{v49Js6q<3N)D00008@(&-s#mDATc zdIl~Ijh~Cv8EZlsYarIp{wij$Nqx)^odYk0?23J+_Lm-S>YAI*W-V=4mc?*G>h1Qf z{)_!5`lHStpF#Wpv$X};+yZrV2*bxc$iU7m+I!EMg_51huS@%GA%0!H++DPcXv5^O zlcUkQ$WdGUoWaqv(QvqKGJWWQC2cpD=zHcwB*^?g zP|1=lB$)c@fO8kF;(0!xS-2<* z=;|-XWIZAj=IO^JAH3d-z-Dx(U?Gn#-w{kLll$jeD-udVb zWk;hGbfhHXy&<|D3lK(0WO?Bg0goI zr7bA$pi4P|l8cDdvAD7tR2^o;n=kfQ+F)_?h!gK+6EiMQ(J-!Iq6~>)2*QRWtQFWU z$`Ry58y{be7o~R{nrNFU*hk68@EJvt0>{%Y8p>U78').text(msg.body).html(); + //msg.body = $('
').text(msg.body).html();
     var message = $('
').html(msg.body); groupmsg_dom.append(message); diff --git a/server/container/messages.php b/server/container/messages.php index 44dbeb0b..75d1f813 100644 --- a/server/container/messages.php +++ b/server/container/messages.php @@ -12,6 +12,13 @@ class Container_messages { */ static public function postMsgToChannel($cid, $uid, $body, $type = 'msg') { + + //Detect Links + $body = Container_messages::replaceLinks($body); + + //Detect Emoticons + $body = Container_messages::addEmoticons($body); + $mid = self::generateMid($cid); $msg = array( 'id' => $mid, @@ -22,6 +29,7 @@ static public function postMsgToChannel($cid, $uid, $body, $type = 'msg') { 'timestamp' => time(), ); + // json encode msg before storing $msg = json_encode($msg); @@ -38,6 +46,41 @@ static public function postMsgToChannel($cid, $uid, $body, $type = 'msg') { return $msg; } + static public function addEmoticons($body){ + $emoticons = array(); + $emoticons[":("] = "face-sad.png"; + $emoticons[":)"] = "face-smile.png"; + $emoticons[":D"] = "face-smile-big.png"; + $emoticons[":o"] = "face-surprise.png"; + $emoticons[";)"] = "face-wink.png"; + $emoticons[":*"] = "face-kiss.png"; + $emoticons[":|"] = "face-plain.png"; + $emoticons[":'("] = "face-crying.png"; + + foreach ($emoticons as $face => $img) { + $body = str_replace($face,'',$body); + } + + return $body; + + } + + static public function replaceLinks($body){ + + @preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $body, $findings, PREG_PATTERN_ORDER); + + if((isset($findings))&&(is_array($findings))){ + $i=0; + foreach ($findings[0] as $key => $value) { + $i++; + + $body = str_replace($value,'Link ['.$i.']',$body); + } + } + return $body; + + } + /** * Generates a unique message id */ @@ -46,5 +89,4 @@ static public function generateMid($cid) { return $mid; } -} - +} \ No newline at end of file From 373f734517b15e1944e0bcdb5188f4b46901832f Mon Sep 17 00:00:00 2001 From: ioanna-m Date: Mon, 9 Jun 2014 15:51:49 +0300 Subject: [PATCH 2/4] Feature: Change username We have added the ability to change your username. --- client/pfc-init.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/client/pfc-init.js b/client/pfc-init.js index be6409b6..ad3dfa78 100644 --- a/client/pfc-init.js +++ b/client/pfc-init.js @@ -481,12 +481,43 @@ var phpFreeChat = (function (pfc, $, window, undefined) { menu += '
  • Remove operator rights
  • '; menu += '
  • Kick
  • '; menu += '
  • Ban
  • '; + if( $(this).parent().attr("id") == "user_"+pfc.uid ) + { + //User's Menu + //Display change username menu + menu += '
  • Change Username
  • '; + }else{ + //Other User's Menu + //Don't display change username menu + } menu += ''; $(this).append(menu); + + $('#changeNickname').click(function (evt) { + + var newName = prompt("Please enter your new nickname", ""); + + if(newName=='') + { + alert('Your nickname may not be blank.'); + } + else{ + pfc.renameUser(newName); + } + }); + }).live("mouseleave", function () { $(".actions-menu").remove(); }); }; + + pfc.renameUser = function (newName) { + //1. Send GET Request + $.get( "../server/users/"+pfc.uid+"/rename/"+newName+"", function( data ) { + //2. Refresh Browser + location.reload(); + }); + } /** * Load specific javascript defined by the theme From 4150645b10f157b229469483ae35442d14ea0b36 Mon Sep 17 00:00:00 2001 From: ioanna-m Date: Tue, 10 Jun 2014 11:05:21 +0300 Subject: [PATCH 3/4] Feature: Up arrow keyboard shortcut Up arrow button shows previous sent messages. --- client/pfc-init.js | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/client/pfc-init.js b/client/pfc-init.js index ad3dfa78..937bd8b6 100644 --- a/client/pfc-init.js +++ b/client/pfc-init.js @@ -295,11 +295,34 @@ var phpFreeChat = (function (pfc, $, window, undefined) { } }); } - + + /** + * Keep history patch + **/ + var lastMessages = new Array(); + var currentMessage = 0; + // connect the textarea enter key event $('.pfc-compose textarea').keydown(function (evt) { - if (evt.keyCode == 13 && evt.shiftKey === false) { + if(evt.keyCode == 38){ + //Up key has been pressed. + if(currentMessage!=0){ + $('.pfc-compose textarea').val(lastMessages[--currentMessage]); + } + } + else if(evt.keyCode == 40) { + //Down key has been pressed. + if(currentMessage!=lastMessages.length){ + $('.pfc-compose textarea').val(lastMessages[++currentMessage]); + } + } + else if (evt.keyCode == 13 && evt.shiftKey === false) { pfc.postCommand($('.pfc-compose textarea').val()); + + //Add message to history + lastMessages.push($('.pfc-compose textarea').val()); + currentMessage = lastMessages.length; + $('.pfc-compose textarea').val(''); return false; } @@ -519,6 +542,7 @@ var phpFreeChat = (function (pfc, $, window, undefined) { }); } + /** * Load specific javascript defined by the theme */ From 11cfd0a991163dcc4c023759adb3a6782efe5e26 Mon Sep 17 00:00:00 2001 From: ioanna-m Date: Tue, 10 Jun 2014 15:27:23 +0300 Subject: [PATCH 4/4] Feature: Change username (2nd part) We have added the ability to change your username. --- server/routes/users.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/server/routes/users.php b/server/routes/users.php index 69e247da..8974ed73 100644 --- a/server/routes/users.php +++ b/server/routes/users.php @@ -83,6 +83,27 @@ $res->body(Container_users::getUserMsgs($uid, true)); }); +/** + * Returns user's pending messages + */ +$app->get('/users/:uid/rename/:new_name', function ($uid,$new_name) use ($app, $req, $res) { + + $old_user_data = file_get_contents("data/users/".$uid."/index.json"); + $old_user_data_array = explode('"',$old_user_data); + $old_user_data_array[3] = $new_name; + + $new_user_data = ""; + foreach ($old_user_data_array as $key => $value) { + $new_user_data .= $value.'"'; + } + $new_user_data = substr($new_user_data,0,-1); + + $file = "data/users/".$uid."/index.json"; + file_put_contents($file, $new_user_data); + + exit; + +}); /** * Set the close flag (when a user reload or close his window)