From e4ccd64647dd65bae7a8657f74bc95c59937f999 Mon Sep 17 00:00:00 2001 From: Max Grossman Date: Sat, 2 Feb 2013 11:32:27 -0600 Subject: [PATCH 01/67] preliminary work on video plugin, based on image plugin --- src/plugins/oerpub/video/README.md | 68 + src/plugins/oerpub/video/css/image.css | 133 ++ src/plugins/oerpub/video/demo/crop.html | 76 + src/plugins/oerpub/video/demo/crop.php | 21 + src/plugins/oerpub/video/demo/cropnresize.jpg | Bin 0 -> 76312 bytes src/plugins/oerpub/video/demo/index.html | 120 ++ src/plugins/oerpub/video/img/blank.jpg | Bin 0 -> 685 bytes src/plugins/oerpub/video/img/crop-buttons.gif | Bin 0 -> 856 bytes src/plugins/oerpub/video/img/cropnresize.png | Bin 0 -> 1981 bytes src/plugins/oerpub/video/img/handle-sw.png | Bin 0 -> 728 bytes .../oerpub/video/img/image-align-left.png | Bin 0 -> 6702 bytes .../oerpub/video/img/image-align-none.png | Bin 0 -> 6653 bytes .../oerpub/video/img/image-align-right.png | Bin 0 -> 6719 bytes src/plugins/oerpub/video/img/image-border.png | Bin 0 -> 6233 bytes src/plugins/oerpub/video/img/image-title.png | Bin 0 -> 6597 bytes src/plugins/oerpub/video/img/image.gif | Bin 0 -> 621 bytes .../oerpub/video/img/padding-decrease.gif | Bin 0 -> 359 bytes .../oerpub/video/img/padding-increase.gif | Bin 0 -> 358 bytes src/plugins/oerpub/video/img/page.png | Bin 0 -> 635 bytes .../oerpub/video/img/size-decrease.gif | Bin 0 -> 346 bytes .../oerpub/video/img/size-increase.gif | Bin 0 -> 345 bytes .../oerpub/video/lib/image-floatingMenu.js | 316 ++++ .../oerpub/video/lib/image-plugin-actions.js | 0 src/plugins/oerpub/video/lib/image-plugin.js | 1391 +++++++++++++++++ src/plugins/oerpub/video/nls/cz/i18n.js | 16 + src/plugins/oerpub/video/nls/de/i18n.js | 1 + src/plugins/oerpub/video/nls/fr/i18n.js | 1 + src/plugins/oerpub/video/nls/i18n.js | 7 + src/plugins/oerpub/video/nls/ru/i18n.js | 16 + src/plugins/oerpub/video/package.json | 1 + src/plugins/oerpub/video/test/test.css | 12 + src/plugins/oerpub/video/test/test.html | 40 + .../oerpub/video/vendor/jcrop/jcrop.gif | Bin 0 -> 329 bytes .../video/vendor/jcrop/jquery.jcrop.css | 46 + .../video/vendor/jcrop/jquery.jcrop.min.js | 165 ++ .../video/vendor/mousewheel/mousewheel.js | 85 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 129 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes 50 files changed, 2515 insertions(+) create mode 100755 src/plugins/oerpub/video/README.md create mode 100755 src/plugins/oerpub/video/css/image.css create mode 100644 src/plugins/oerpub/video/demo/crop.html create mode 100644 src/plugins/oerpub/video/demo/crop.php create mode 100644 src/plugins/oerpub/video/demo/cropnresize.jpg create mode 100644 src/plugins/oerpub/video/demo/index.html create mode 100755 src/plugins/oerpub/video/img/blank.jpg create mode 100644 src/plugins/oerpub/video/img/crop-buttons.gif create mode 100755 src/plugins/oerpub/video/img/cropnresize.png create mode 100644 src/plugins/oerpub/video/img/handle-sw.png create mode 100755 src/plugins/oerpub/video/img/image-align-left.png create mode 100755 src/plugins/oerpub/video/img/image-align-none.png create mode 100755 src/plugins/oerpub/video/img/image-align-right.png create mode 100755 src/plugins/oerpub/video/img/image-border.png create mode 100755 src/plugins/oerpub/video/img/image-title.png create mode 100755 src/plugins/oerpub/video/img/image.gif create mode 100755 src/plugins/oerpub/video/img/padding-decrease.gif create mode 100755 src/plugins/oerpub/video/img/padding-increase.gif create mode 100755 src/plugins/oerpub/video/img/page.png create mode 100755 src/plugins/oerpub/video/img/size-decrease.gif create mode 100755 src/plugins/oerpub/video/img/size-increase.gif create mode 100644 src/plugins/oerpub/video/lib/image-floatingMenu.js create mode 100644 src/plugins/oerpub/video/lib/image-plugin-actions.js create mode 100755 src/plugins/oerpub/video/lib/image-plugin.js create mode 100755 src/plugins/oerpub/video/nls/cz/i18n.js create mode 100755 src/plugins/oerpub/video/nls/de/i18n.js create mode 100755 src/plugins/oerpub/video/nls/fr/i18n.js create mode 100755 src/plugins/oerpub/video/nls/i18n.js create mode 100755 src/plugins/oerpub/video/nls/ru/i18n.js create mode 100755 src/plugins/oerpub/video/package.json create mode 100644 src/plugins/oerpub/video/test/test.css create mode 100644 src/plugins/oerpub/video/test/test.html create mode 100755 src/plugins/oerpub/video/vendor/jcrop/jcrop.gif create mode 100755 src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.css create mode 100755 src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.min.js create mode 100644 src/plugins/oerpub/video/vendor/mousewheel/mousewheel.js create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_222222_256x240.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100755 src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ffffff_256x240.png diff --git a/src/plugins/oerpub/video/README.md b/src/plugins/oerpub/video/README.md new file mode 100755 index 0000000000..6b1f2485b0 --- /dev/null +++ b/src/plugins/oerpub/video/README.md @@ -0,0 +1,68 @@ + +# The AlohaEditor Image Plugin + +Image Plugin for enabling basic images manipulations in Aloha Editor + +## Features + +* Insert image +* Edit url and title +* set align +* Handles [DragnDropFiles Plugin](https://github.com/alohaeditor/Aloha-Plugin-DragAndDropFiles) events for image files dropped in current page. +* css resize with controlbuttons or mousedrag +* reset to natural size (DEV) +* canvas crop (EXPERIMENTAL) + +## Example conf + + config: { + 'img': { + 'max_width': '50px', + 'max_height': '50px', + //Image manipulation options - ONLY in default config section + 'ui': { + 'align': true, // Menu elements to show/hide in menu + 'resize': true, //resize buttons + 'meta': true, + 'margin': true, + 'crop':true, + 'resizable': true, //resizable ui-drag image + 'aspectRatio': true + }, + /** + * crop callback is triggered after the user clicked accept to accept his crop + * @param image jquery image object reference + * @param props cropping properties + */ + 'onCropped':function (image, props) {}, + /** + * reset callback is triggered before the internal reset procedure is applied + * if this function returns true, then the reset has been handled by the callback + * which means that no other reset will be applied + * if false is returned the internal reset procedure will be applied + * @param image jquery image object reference + * @return true if a reset has been applied, false otherwise + */ + 'onReset': function (image) { return false; } + } + } + +## TODO + +* resize slider +* canvas resize + +Copyright (c) 2010-2011 Gentics Software GmbH, aloha@gentics.com + +Author : [Nicolas Karageuzian](https://github.com/nka11) + +Contributors : + +* [Nils Dehl](https://github.com/mrsunshine) +* [Benjamin Athur Lupton](https://github.com/balupton) +* [Christopher Hlubek](https://github.com/chlu) +* [Thomas Lete](https://github.com/bistory) +* [Haymo Meran](https://github.com/draftkraft) +* [Clemens Prerovsky](https://github.com/cprerovsky) (base of crop and resize feature is a borrow from cropnresize plugin) +* [Norbert Pomaroli](https://github.com/npomaroli) (for his patience explaining Selection and Range) +* [Kirk Austin](http://www.kirkaustin.com/) who gave the impulsion to dive into html5 canvas diff --git a/src/plugins/oerpub/video/css/image.css b/src/plugins/oerpub/video/css/image.css new file mode 100755 index 0000000000..c7bbba6aa7 --- /dev/null +++ b/src/plugins/oerpub/video/css/image.css @@ -0,0 +1,133 @@ + +/* Images */ +.aloha-image-align-left { + background: url(../img/image-align-left.png); +} + +.aloha-image-align-right { + background: url(../img/image-align-right.png); +} + +.aloha-image-align-none { + background: url(../img/image-align-none.png); +} + +.aloha-img.aloha-image-title { + background: url(../img/image-title.png); +} + +.aloha-img.aloha-image-border { + background: url(../img/image-border.png); +} + +.aloha-image-insert { + background: url(../img/image.gif) !important; +} + +.aloha-img.aloha-image-padding-increase { + background: url(../img/padding-increase.gif); +} + +.aloha-img.aloha-image-padding-decrease { + background: url(../img/padding-decrease.gif); +} + +.aloha-img.aloha-image-size-increase { + background: url(../img/size-increase.gif); +} + +.aloha-img.aloha-image-size-decrease { + background: url(../img/size-decrease.gif); +} + +.aloha-default-file-icon { + background: url(../img/page.png); + + width: 16px; + height:16px; + margin: 0; + padding:0; +} + +/* Crop and Resize */ +.aloha-icon-cnr-resize, .aloha-icon-cnr-crop, .aloha-icon-cnr-reset { + background: url(../img/cropnresize.png); +} + +.aloha-icon-cnr-crop { + background-position: -2px -2px !important; +} + +.aloha-icon-cnr-reset { + background-position: -42px -2px !important; +} + +.aloha-icon-cnr-ratio { + background-image: url(../img/cropnresize.png) !important; + background-position: -60px -2px !important; +} + +#aloha-CropNResize-btns { + z-index: 10000; + width: 70px; + display: none; + position: absolute; +} + +#aloha-CropNResize-btns button { + background: #ededed; + border: 1px solid #c6c6c6; + cursor: pointer; + color: #96ca03; + text-shadow: -1px -1px 1px rgba(0,0,0,0.3); + font-size: 16px; + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + padding: 0px; + width: 23px; + height: 23px; + margin-right: 3px; +} + +#aloha-CropNResize-btns button.cnr-crop-apply { + padding-left: 2px; +} + +#aloha-CropNResize-btns button.cnr-crop-cancel { + color: #c92404; +} + +/* + * fix to use big resize handle for images + */ +.aloha .ui-resizable-se { + width: 16px; + height: 16px; + background-position: -80px -224px !important; +} + + +.aloha-image-box-active { + -moz-box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.2); +} + +.aloha-image-box-active .ui-resizable-handle.ui-resizable-nw { +} +.aloha-image-box-active .ui-resizable-handle.ui-resizable-ne { +} +.aloha-image-box-active .ui-resizable-handle.ui-resizable-se { +} +.aloha-image-box-active .ui-resizable-handle.ui-resizable-sw { +} + +.aloha.aloha-toolbar .aloha-image-input-label .aloha-ui-label-text { + /* give labels a reasonable static width so that the url, title, width, + height labeled input elements will align vertically */ + display: inline-block; + width: 31px; +} + +@import "../vendor/jcrop/jquery.jcrop.css"; diff --git a/src/plugins/oerpub/video/demo/crop.html b/src/plugins/oerpub/video/demo/crop.html new file mode 100644 index 0000000000..bf7f98ccf0 --- /dev/null +++ b/src/plugins/oerpub/video/demo/crop.html @@ -0,0 +1,76 @@ + + + + + Aloha, World! + + + + + + +
+

Aloha, Images! (Extended Version :)

+
+
+

This extended example is intended for developers planning to use the the CropNResize plugin found at https://github.com/alohaeditor/Aloha-Plugin-CropNResize. It displays the whole set of configuration options currently available. Well, just take a look at the code.

+
+
+

Click the image to start resizing right away, as a resize handle will appear in it's south-east corner.

+

+
+
+
    +
    + + \ No newline at end of file diff --git a/src/plugins/oerpub/video/demo/crop.php b/src/plugins/oerpub/video/demo/crop.php new file mode 100644 index 0000000000..350a35959f --- /dev/null +++ b/src/plugins/oerpub/video/demo/crop.php @@ -0,0 +1,21 @@ + diff --git a/src/plugins/oerpub/video/demo/cropnresize.jpg b/src/plugins/oerpub/video/demo/cropnresize.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0fad22ff479befbe3efdfd08e74d299e46dc72e GIT binary patch literal 76312 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

    xyq5-sd~L^zpUIkKxpC#? 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 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/demo/index.html b/src/plugins/oerpub/video/demo/index.html new file mode 100644 index 0000000000..c0f1800314 --- /dev/null +++ b/src/plugins/oerpub/video/demo/index.html @@ -0,0 +1,120 @@ + + + + + Aloha, Images! + + + + + + + + + + + +

    + +
    +

    Aloha, Images!

    +
    +
    +

    This example will show you how to use the Image plugin found at https://github.com/alohaeditor/Aloha-Plugin-Image.

    +
    +
    + +

    +

    Click the image to start resizing right away, as a resize handle will appear in it's south-east corner.

    + +

    Note: This is a very simple example, that will not allow subsequent cropping actions, or cropping combined with resizing.

    +
    + + Outside of the editable +

    +
    + + +
    + + + + + diff --git a/src/plugins/oerpub/video/img/blank.jpg b/src/plugins/oerpub/video/img/blank.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f882a38ccbf20bf6b8525f035bfc9b144eec88a9 GIT binary patch literal 685 zcmex=n}?T8Rorq(5U5H7RWHaGkfcn{zeJb(tU7%peF?$_A5WI>V5%^m(Tk>%+AQ2Yb#$OkBnJ zX2W6KNz$2|6E=AXP5LlpqM)E)g_45o`fb~<&zUUvErvlVHL1j@`Ef=0nj4!1r>VPW z*qOIio$WRNdqdK+cI&=9PiFLQdcgYa+ON-(lI%`5F#D|W>jGl z`p+OVNl8gbpT)&G?dat@yUy>O{EdNewzz-MYrAj$H}H!w`PJ+Ue(o{X%KOsNlcoN4 Yzt2hCDb2FKs_SL11r1XM2KoOt0fZOc5dZ)H literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/crop-buttons.gif b/src/plugins/oerpub/video/img/crop-buttons.gif new file mode 100644 index 0000000000000000000000000000000000000000..b854ca4faf904e713fa939c66039d96888b21209 GIT binary patch literal 856 zcmV-e1E>5)Nk%w1VK@L80LFU&$s`2HCkM$Z48|=F%PkJZFcZcy6~{Fh!#^g(KPJjQ zB+ybi(o{UrRXx&HKGIo1yI)P$ab3H4Y}ayM#&~GTcxcOgZOwmg%!+-@i+-_|k+7GN z+l_s*n3L9&hs~FbxuBb|rK8iJmbR;@sj`on#3HM-k*2wEu&}VEx^I`s36{zOm&ps4 z$_1UoFq+35skwZZ$_lcwvY5*U)2pMiv$LSeDYmw@wYRXI%^KjXqqw-Z*|4a&xw*T$ zyQk4Hy}iA?zPrA@zQDl1tkXcX%yhxQ!Q{KMvDHn+#>VBtyw1tUzuI%Z+i}m&&%@h( z(9qD%)4|oy&(hM;)YR0~)z#M4*3ICU*Vot9+RWM6+0x>o+uPgU-{0om-QeKh+UC0A z;^OMz;N#=tuz*=jZ3->eT1y;pph->FMd|>*MO`>g((4>g?s~?C9+5 z?CtFA?CtCA?d{Qv*}000000000000000A^8LW3IKlqEC2ui z05|{{000O6fPaF6goTEOh>41WcT-7^kdcy)RCkJvlbMlJd4qUVZ+4=iq@|*7RCtJ= zp{A~*sCt5+ueGOCh_tq^sDeqmwn>P;q;6w&W6x-Y+pl5 zW^Zd;KvLGF&fBJPXH-HyS#hMEJeo1jwm}!#8~m8O|yrj&{&ah6u<&8S3i;pgQG+Y5-(QdNaKng zp>4L~ZfqEEv_iP0q{swOv4X{l8DL(y9b~Udj|~R80=O{Hq1aJtoVe(@;z_N+1x3l> z0wQrm1xGpHg*B!~Pa~KhJcCEQwwm=C9t0ee3F!gAggLf> z1%10tiBi^bjv!C299!?|)*oZfu5!C$b=xs(_nywX6|ICIjduR6u8KO3^sU3AOJhEY1D-P literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/cropnresize.png b/src/plugins/oerpub/video/img/cropnresize.png new file mode 100755 index 0000000000000000000000000000000000000000..ae04f13ac23a73225ebb4676ecc05b5f3452fe17 GIT binary patch literal 1981 zcmV;u2SWIXP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipk^ z4;2*}W4R�%uuL_t(o!|j+$Y#dn?hQF%n?y=Jo$2b$mFOreROe{8xQcCVvLli(_ z#GUjL^H3>^pa_vTQnJWuKt#w0nZlHn1jl(0h)3@B zE3so^r`ztX2MbPFz`a=ft<;(|O+(jpqN}d!5pYpgfLdQ)|4LI+ z(|3Wt0}GaA6>2c?>%a$&<9xf!)wO!Aycq+#y1L!~-nw?}+WUrKaQN_H7nqg48h^=k z-J#g+URh+ST5K(qN}M})jvF^_(9+Vv;NT$r{r%-@*(sJ!)L5^fX&Tjf1fs6%1VQk* zVzKyxR4Vlopagj0+SOe5-DAg&y?gocWi0~Eah$LohvoZ{NOw-rnA!J$v?i*wxi_slC1ZQd?Ww zrIwbKOHEBp9~*`-lSm}cbsgXL4*{PAc1z4Gcis28ySq0Ba=F|irPNpi9Dw|ujTl*t zff0aHK@da$&Io|x0w%8OPMfCrX`oZnw8-^}^>#fuIZ1DCFS~Z_;_>6hWV6}l1+XBo zYE;&ij`iYlrVrbUgw=oR#sSDT_ur7REmF5DA)i zmdz$IX#;qY%jJ%(uCD&FR4VlWF9WHKjg6jsK7ZQtJW8b!K@j+wruo9s`1+k#9E_5M z0)87Ce@7|xLHs%3pY?<^K@bp^9uf1NLcT%p0EUN$85|s>udj~>4<2yw;ziD%Kfn1M zP16`3AI|`pFbpGU^pqyFEK8r6nd!*q^FP;h{kUNmtgWs6qEIMoX5%QKgkeZBnOu@h z7bKBHjC)fl^*f*~7Uwj_ao!f@y#oZmx0F(=72;=g2FCTC>$<}d^QZ)1J&gx2Jw46R z(h_}reE=Lfbcl(GiA{+!G&IDKBS*M$a3^{uAC;+EVpDwRH7#SI1WMqWhyLWTu%o)y}JsbU9O%v)}U0pw3SXg+~ z_k9%^Fbu=ZkdjO$^Ucl8bKAFXzah!v7BCO2m&Lth;Ez>s`HsZQZ#-))yy?QZT#otq z`H$ivHIfI3M1r=qwuq$`V40?w0anD?o~CIVQejkW>+ApCQ)_E0^YinKXu_biwe?YJ zYwP#3+3XM3*4Dn%+1Yt3olY-FhJ7OLx+KiI3;a#iRH{)MZ_#>=;{?DdrBoXD>azgo zMYXV|X`8Mb-Ai`H_k9fGsq=xo61P@?qSUqnz-L4rY)Kg784!W+>(a}LZ zpRZd8i8`3>>FN3D+}zwk7=}-P2f!m>S(vsapgokaLXA=`ih*;Y7hmW!rg-ASi2*6k z_6iF&DoB;>Q&Ur?BtyHv?K*mGTZO74bK$}TOw%NtPILYGb?)E4UvsgxZ3mWR6-1YM z9UUD%16t&J%aSlkWrqn~ox_BPfgMVzdt&g0JvLEg<4Ac{?KEYFuIs1d_igF_5UUpj z@Vqc!y@Cc?4a1Ph$w?+BCpQOAo;(?e^F?{zs{&#kn3Ir^63`03dOfgeFi>+G=XIsj z#}W!EwOpeIs`bwCb^xymOA+wy2{Y=R=UJB3CW)ewi$9XMH45CbZF{N89J*x6hyjxEMX8k)me;mV54*Xx7xn|3Wj*r9nCbi P00000NkvXXu0mjf_b143 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/handle-sw.png b/src/plugins/oerpub/video/img/handle-sw.png new file mode 100644 index 0000000000000000000000000000000000000000..7c8b686f23f0771d441b4c57f0bee1551891e093 GIT binary patch literal 728 zcmV;}0w?{6P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipi9 z6E-Gs>Lh>w000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0006rNkl?}f5-gwGc<9qo6b2hm+uscM4-d}v1nK}1f zU;uuVC+r%JDBIW>1jM%Sh++jBgMe5w9#MF}it&hi8B3~q)xm)=h+GL#f`}V~$QBVX zK0mTW%o(2_nF3~v&krk)X;r;c#g;LMbPkh}5PYoRG<1km783-qP7o(yM2wRVTvgR= z7e`@4j7gH*c5xUwL^6X>lH|+AB)Jb_$(SThS{Nbi$RbJdJyqTHa2-ZORML*P9Mh&{iHHahCxIbY7poC*7uY=E6Lwk<&mH7@KH0I}sSCuds^01#*Yg>h zb+MsDSb0oI<_VVAK_jMxh?o|{E3(=UnF3}dGqw-nG%y5PW3p`rnBI}V%fHX4MlxHu(QwdfbE^wc*=Swtq6AZSst)8 zCPT1RoaIDUh*A}sl2^#C;aG|AaM?@5`xjh_@HsYdNvN^CQ@;=~$=PSG5ZeH<8Jl&n zT_M<$>2vm#uTZUt8-hsn93ee6KCh56)Vvp@RrU583aWbN6IC&ST~wC9?Ci5V=nI1V zS@y-*v0)du`2tG^;^P}NRsHh^P5NhjzWA-=0<%zSzoDoN0pJ(DI=}pP0$95M0000< KMNUMnLSTX>aV^yV literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/image-align-left.png b/src/plugins/oerpub/video/img/image-align-left.png new file mode 100755 index 0000000000000000000000000000000000000000..5436f1760c4fa0879a2ea844a41ba441b88d7634 GIT binary patch literal 6702 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 VA>c`+BryO0002ovPDHLkV1nO`7eN33 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/image-border.png b/src/plugins/oerpub/video/img/image-border.png new file mode 100755 index 0000000000000000000000000000000000000000..9a0e100805d473c08cd23149972a7b9e23a5f39b GIT binary patch literal 6233 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 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/image.gif b/src/plugins/oerpub/video/img/image.gif new file mode 100755 index 0000000000000000000000000000000000000000..d5924f4bb36a73a3cd9245b098dba3fd783bd889 GIT binary patch literal 621 zcmZ?wbhEHb6krfwc*el+;q%vwKSo{`2<NYb zUv>7rrlE7qrhvvBp+{c)UwG^PzNi0}-}zs&Ik0krU;WnL?T`LVzxIFq{r?Tyf-Bbh zHtq~Pedglod;d2)_`mZp(4wHTuYpzsS8w#&bnQ^(dcR$df!v^`onbSt|6g$P|CWdU zm)!n8|K|Uy4ZfA@eK$V%-?%-bdV~M=NB>W~`oI6_{}p%suetaC{}YC)4SrP{{hN1% z&%N>g$n*b8Z~t#ybKKE0(kC*%Z0e@a?CyInK0SN$<^TWx3)w2#=%N)wYWTM35t|6wz7aG{KM?ip$%|T4uj8*hRlYgkNu(-26AFGhB)U~i1 ztgMQzLZb3gE{0ETu(O+bO3HHcnhS;oGzEq7{Slay*x19t6=bvE(RnThQI#n@839g? z0{j*d|Ck>nA7hf>l3Nqu)X3D(7Hq(<;?Sh0Y79CSe`Y%sdrg@gP~`M*!kG!@9UB=K FtO3mL_vrut literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/padding-decrease.gif b/src/plugins/oerpub/video/img/padding-decrease.gif new file mode 100755 index 0000000000000000000000000000000000000000..ea186d31a61fcb10b496e3e299fcb64fca3195cb GIT binary patch literal 359 zcmZ?wbhEHb6krfwxXQp_nEhnVj!(0e@3aoee*5vyxjXN-AA5N8^83}>PvlqhKYaS3 zW8vBFfBvsof9dGCN6%k>4~@^6wf6Gbz1Nm)IeGK$`_ngn+Z`Tzg_)5l+*KL7asU*>H* z?HHE#{m0)m>o3h+wd>}yPs_HPJbLcYxoc0hAA8ub@a+Hp|DQho`t+7jnyk@HbW+xcJgW$z1h;onr_Z9^6i;o%F;AR#_X8O%)=8sWY`re zT;-}+)a4~4l$%{zRb^QCI(c;T7~JHFHPj^~c=W{tXSi}pvMX^Ji0aCUt1NM0W0u}3 b&9H-kncsyuB*>6)pXY&K59gyEjttfSIX9a3 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/page.png b/src/plugins/oerpub/video/img/page.png new file mode 100755 index 0000000000000000000000000000000000000000..03ddd799fa0a3aec561c75d4221f195db65d6eb9 GIT binary patch literal 635 zcmV->0)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4kvhNU<6pM87k%8&I29)0}z zZ{pH()3$#4|NsBet>+G$|GweG-IJGp0J#jb0g69a7}*(=7<53!gZ#w6R_-vdz(Yr> z|7iOs#SAOO2?rfsyo^{MvD*2^i6qOG)|OXq1q@owGbxBvn6fw}876k$3HMznq|U-q z#vE2#Ey~y~*%+o+DB8v-E-cq2$ReKDK9Nnjv4BIAdnOy3!W<{&c40P2NnSY-X)&%w Sc7|=+cWm?6y~oXw!5RRtg?q37 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/img/size-increase.gif b/src/plugins/oerpub/video/img/size-increase.gif new file mode 100755 index 0000000000000000000000000000000000000000..e673ee9ffa50d112ffbf31d0cc653571f5ea2226 GIT binary patch literal 345 zcmZ?wbhEHb6krfwxXQp_;+=fq;fICm4^LjW*)Z$LhmU^`pS%~8+|aw`&6X4Io2MUM zwCnDJ2Os|b_`i7j<@o&m(^q~>S$;S&Htp!8N6S~9fAHdS!_u1vF1(++_0#$Tj}Dyw z{_*F(iA&G@|NnpK)^i(9+yyciXbBX5vM{nUC@|=NECKn6fvwD8LV<^lRKIKcCB+OY z<%tI!Uc8K0AMx7x#fdo1gtnGfTb&LuEIhFLqJU6~r_`2xd0e7QO@anz*uy1QDnuFE zB 0) { + // when value is 2, won't increase + newValue--; + } + obj.css(attr, newValue); + // Chain + return obj; + } + }); + + // Create and register Image Plugin + return Plugin.create('video', { + + languages: ['en', 'fr', 'de', 'ru', 'cz'], + + defaultSettings: { + 'maxWidth': 1600, + 'minWidth': 3, + 'maxHeight': 1200, + 'minHeight': 3, + // This setting will correct manually values that are out of bounds + 'autoCorrectManualInput': true, + // This setting will define a fixed aspect ratio for all resize actions + 'fixedAspectRatio' : false, + // When enabled this setting will order the plugin to automatically resize images to given bounds + 'autoResize': false, + //Image manipulation options - ONLY in default config section + ui: { + oneTab : false, //Place all ui components within one tab + insert : true, // Shows an insert button on std floatingMenu scope + reset : true, // Reset to default size + aspectRatioToggle: true, // Toggle button for the aspect ratio + align : true, // Menu elements to show/hide in menu + resize : true, // Resize buttons + meta : true, // Shows field for changing src and title attributes of an image + margin : true, // shows button to increase/decrease image margin properties + crop : true, // enable/show crop actions on a image + resizable : true, // Resizable ui-drag image + handles : 'ne, se, sw, nw' // set handles for resize + }, + + /** + * Crop callback is triggered after the user clicked accept to accept his crop + * @param image jquery image object reference + * @param props cropping properties + */ + onCropped: function ($image, props) { + Aloha.Log.info('Default onCropped invoked', $image, props); + }, + + /** + * Reset callback is triggered before the internal reset procedure is applied + * if this function returns true, then the reset has been handled by the callback + * which means that no other reset will be applied + * if false is returned the internal reset procedure will be applied + * @param image jquery image object reference + * @return true if a reset has been applied, false otherwise + */ + onReset: function ($image) { + Aloha.Log.info('Default onReset invoked', $image); + return false; + }, + + /** + * Example callback method which gets called while the resize process is beeing executed. + */ + onResize: function ($image) { + Aloha.Log.info('Default onResize invoked', $image); + }, + + /** + * Resize callback is triggered after the internal resize procedure is applied. + */ + onResized: function ($image) { + Aloha.Log.info('Default onResized invoked', $image); + }, + + /** + * Upload callback is triggered after an image was uploaded + * to determine the server-side URI of the uploaded image. + * The default expects a json-formatted message. + */ + onUploadSuccess: function(xhr) { + return xhr.response; + }, + + /** + * Upload callback is triggered after an image failed to upload. + */ + onUploadFail: function(xhr) { + Aloha.Log.info('Default onUploadFail invoked'); + } + }, + + /** + * Internal callback hook which gets invoked when cropping has been finished + */ + _onCropped: function ($image, props) { + $('#' + this.ui.imgResizeHeightField.getInputId()).val($image.height()); + $('#' + this.ui.imgResizeWidthField.getInputId()).val($image.width()); + + + $('body').trigger('aloha-image-cropped', [$image, props]); + + // Call the custom onCropped function + this.onCropped($image, props); + }, + + /** + * Internal callback hook which gets invoked when resetting images + */ + _onReset: function ($image) { + + $('#' + this.ui.imgResizeHeightField.getInputId()).val($image.height()); + $('#' + this.ui.imgResizeWidthField.getInputId()).val($image.width()); + + // No default behaviour defined besides event triggering + $('body').trigger('aloha-image-reset', $image); + + // Call the custom resize function + return this.onReset($image); + }, + + /** + * Internal callback hook which gets invoked while the image is beeing resized + */ + _onResize: function ($image) { + + $('#' + this.ui.imgResizeHeightField.getInputId()).val($image.height()); + $('#' + this.ui.imgResizeWidthField.getInputId()).val($image.width()); + + // No default behaviour defined besides event triggering + $('body').trigger('aloha-image-resize', $image); + + // Call the custom resize function + this.onResize($image); + }, + + /** + * Internal callback hook which gets invoked when the current resizing action has stopped + */ + _onResized: function ($image) { + + $('#' + this.ui.imgResizeHeightField.getInputId()).val($image.height()); + $('#' + this.ui.imgResizeWidthField.getInputId()).val($image.width()); + + $('body').trigger('aloha-image-resized', $image); + + // Call the custom resize function + this.onResized($image); + }, + + /** + * The image that is currently edited + */ + imageObj: null, + + /** + * The Jcrop API reference + * this is needed to be able to destroy the cropping frame later on + * the variable is linked to the api object whilst cropping, or set to null otherwise + * strange, but done as documented http://deepliquid.com/content/Jcrop_API.html + */ + jcAPI: null, + + + /** + * State variable for the aspect ratio toggle feature + */ + keepAspectRatio: false, + + /** + * Variable that will hold the start aspect ratio. This ratio will be used once starResize will be called. + */ + startAspectRatio: false, + + /** + * This will contain an image's original properties to be able to undo previous settings + * + * when an image is clicked for the first time, a new object will be added to the array + * { + * obj : [the image object reference], + * src : [the original src url], + * width : [initial width], + * height : [initial height] + * } + * + * when an image is clicked the second time, the array will be checked for the image object + * referenct, to prevent for double entries + */ + restoreProps: [], + + objectTypeFilter: [], + + /** + * Plugin initialization method + */ + init: function () { + + var plugin = this; + + var imagePluginUrl = Aloha.getPluginUrl('image'); + + + + // Extend the default settings with the custom ones (done by default) + plugin.startAspectRatio = plugin.settings.fixedAspectRatio; + plugin.config = plugin.defaultSettings; + plugin.settings = jQuery.extend(true, plugin.defaultSettings, plugin.settings); + + plugin.initializeUI(); + plugin.bindInteractions(); + plugin.subscribeEvents(); + + }, + + /** + * Create buttons + */ + initializeUI: function () { + + var that = this; + + this.ui = new ImageFloatingMenu(); + this.ui.init(this); + }, + /** + * Bind plugin interactions + */ + bindInteractions: function () { + var plugin = this; + + if (plugin.settings.ui.resizable) { + try { + // this will disable mozillas image resizing facilities + document.execCommand('enableObjectResizing', false, false); + } catch (e) { + Aloha.Log.info(e, 'Could not disable enableObjectResizing'); + // this is just for internet explorer, who will not support disabling enableObjectResizing + } + } + + if (plugin.settings.ui.meta) { + // update image object when src changes + plugin.ui.imgSrcField.addListener('keyup', function (event) { + plugin.srcChange(); + }); + + plugin.ui.imgSrcField.addListener('blur', function (event) { + // TODO remove image or do something usefull if the user leaves the + // image without defining a valid image src. + var img = jQuery(plugin.ui.imgSrcField.getTargetObject()); + if (img.attr('src') === '') { + img.remove(); + } // image removal when src field is blank + }); + } + + // Override the default method by using the given one + if (plugin.settings.onCropped && typeof plugin.settings.onCropped === "function") { + plugin.onCropped = plugin.settings.onCropped; + } + + // Override the default method by using the given one + if (plugin.settings.onReset && typeof plugin.settings.onReset === "function") { + plugin.onReset = plugin.settings.onReset; + } + + // Override the default method by using the given one + if (plugin.settings.onResized && typeof plugin.settings.onResized === "function") { + plugin.onResized = plugin.settings.onResized; + } + + // Override the default method by using the given one + if (plugin.settings.onResize && typeof plugin.settings.onResize === "function") { + plugin.onResize = this.settings.onResize; + } + + }, + + /** + * Subscribe to Aloha events and DragAndDropPlugin Event + */ + subscribeEvents: function () { + var plugin = this; + var config = this.settings; + + jQuery('img').filter(config.globalselector).unbind(); + jQuery('img').filter(config.globalselector).click(function (event) { + plugin.clickImage(event); + }); + + Aloha.bind('aloha-drop-files-in-editable', function (event, data) { + var img, len = data.filesObjs.length, fileObj, config; + + while (--len >= 0) { + fileObj = data.filesObjs[len]; + if (fileObj.file.type.match(/image\//)) { + config = plugin.getEditableConfig(data.editable); + // Prepare + // If the user is dropping onto an existing image change the existing img tag + if (data.range.startContainer === data.range.endContainer && data.range.startContainer.tagName && data.range.startContainer.tagName.toLowerCase() == 'img') { + img = jQuery(data.range.startContainer); + img.attr('src', fileObj.file.objectURL); + } else { + img = jQuery(''); + img.css({ + "max-width": plugin.maxWidth, + "max-height": plugin.maxHeight + }); + img.attr('id', fileObj.id); + img.attr('src', fileObj.file.dataURI); + + var start = jQuery(data.range.startContainer).parents('.aloha-image-upload-drop-box'); + if (start.length != 0) { + // Replace the box with the image tag. + start.replaceWith(img); + } else { + GENTICS.Utils.Dom.insertIntoDOM(img, data.range, jQuery(Aloha.activeEditable.obj)); + } + } + } + } + }); + + /* Event handlers for successful/failed uploads */ + Aloha.bind('aloha-upload-success', function (event, data) { + // Get the server-side url from the response, set it + // as the src for the image. + var url = plugin.settings.onUploadSuccess(data.xhr); + if ( url !== null && data.file.droptarget) { + var $target = jQuery(data.file.droptarget); + if ($target.is('img')){ + jQuery(data.file.droptarget).attr('src', url); + } else { + var $img = jQuery(''); + $img.css({ + "max-width": plugin.maxWidth, + "max-height": plugin.maxHeight + }); + $img.attr('src', url); + var range = Aloha.Selection.getRangeObject(); + GENTICS.Utils.Dom.insertIntoDOM($img, range, $target); + } + } + }); + + Aloha.bind('aloha-upload-failure', function (event, data) { + plugin.settings.onUploadFail(data.xhr); + }); + + /* + * Add the event handler for selection change + */ + Aloha.bind('aloha-selection-changed', function (event, rangeObject, originalEvent) { + var config, foundMarkup; + if (originalEvent && originalEvent.target) { + // Check if the element is currently beeing resized + if (plugin.settings.ui.resizable && !jQuery(originalEvent.target).hasClass('ui-resizable-handle')) { + plugin.endResize(); + plugin.imageObj = null; + Aloha.trigger('aloha-image-unselected', originalEvent.target); + } + } + + if (Aloha.activeEditable !== null) { + foundMarkup = plugin.findImgMarkup(rangeObject); + config = plugin.getEditableConfig(Aloha.activeEditable.obj); + + if (typeof config !== 'undefined') { + plugin.ui._insertImageButton.show(); + } else { + plugin.ui._insertImageButton.hide(); + return; + } + + // Enable image specific ui components if the element is an image + if (foundMarkup) { // TODO : this is always null (below is dead code, moving it to clickImage) + plugin.ui._insertImageButton.show(); + plugin.ui.setScope(); + if (plugin.settings.ui.meta) { + plugin.ui.imgSrcField.setTargetObject(foundMarkup, 'src'); + plugin.ui.imgTitleField.setTargetObject(foundMarkup, 'title'); + plugin.ui.imgAltField.setTargetObject(foundMarkup, 'alt'); + } + plugin.ui.imgSrcField.foreground(); + plugin.ui.imgSrcField.focus(); + } else { + if (plugin.settings.ui.meta) { + plugin.ui.imgSrcField.setTargetObject(null); + } + } + // TODO this should not be necessary here! + plugin.ui.doLayout(); + } + + }); + + Aloha.bind('aloha-editable-created', function (event, editable) { + + try { + // this will disable mozillas image resizing facilities + document.execCommand('enableObjectResizing', false, false); + } catch (e) { + Aloha.Log.info(e, 'Could not disable enableObjectResizing'); + // this is just for others, who will not support disabling enableObjectResizing + } + + // Inital click on images will be handled here + // editable.obj.find('img').attr('_moz_resizing', false); + // editable.obj.find('img').contentEditable(false); + editable.obj.delegate('img', 'mouseup', function (event) { + plugin.clickImage(event); + event.stopPropagation(); + }); + }); + + plugin._subscribeToResizeFieldEvents(); + + }, + + + /** + * Automatically resize the image to fit into defined bounds. + */ + autoResize: function() { + // @todo add an option to do just down scaling and not upscale when image is too small + // @todo handle ratio mismatches (eg 4:3 is set but image is 16:9 --> image need to be cut) + + var that = this; + + var width = that.imageObj.width(); + var height = that.imageObj.height(); + var resize = false; + + // Only normalize the field values when the image exeeds the definded bounds + if (width < that.settings.minWidth || + width > that.settings.maxWidth || + height < that.settings.minHeight || + height > that.settings.maxHeight) { + resize = true; + } + + if ( resize && width >= height ) { + that._setNormalizedFieldValues('width'); + that.setSizeByFieldValue(); + return true; + } else if ( resize && width < height ) { + that._setNormalizedFieldValues('height'); + that.setSizeByFieldValue(); + return true; + } else { + return false; + } + }, + + /** + * Toggle the keep aspect ratio functionallity + */ + toggleKeepAspectRatio: function() { + + this.keepAspectRatio = !this.keepAspectRatio; + + this.endResize(); + if (!this.keepAspectRatio) { + this.startAspectRatio = false; + } else { + // If no fixed aspect ratio was given we will calculate a new start + // aspect ratio that will be used for the next starResize action. + if ( typeof this.settings.fixedAspectRatio !== 'number' ) { + var currentRatio = this.imageObj.width() / this.imageObj.height(); + this.startAspectRatio = currentRatio; + } else { + this.startAspectRatio = this.settings.fixedAspectRatio; + } + } + this.startResize(); + }, + + /** + * Bind interaction events that are invoked on the resize fields + */ + _subscribeToResizeFieldEvents: function () { + var plugin = this; + + /** + * Helper function that will update the fields + */ + function updateField($field, delta, maxValue, minValue) { + + if (typeof minValue === 'undefined') { + minValue = 0; + } + + if (typeof maxValue === 'undefined') { + maxValue = 8000; + } + + // If the current value of the field can't be parsed we don't update it + var oldValue = parseInt($field.val(), 10); + if (isNaN(oldValue)) { + $field.css('background-color', 'red'); + return false; + } + + var newValue = oldValue + delta; + // Exit if the newValue is above the maxValue limit (only if the user tries to increment) + if (delta >= 0 && newValue > maxValue) { + + // Auto correct out of bounds values + if (plugin.settings.autoCorrectManualInput) { + $field.val(maxValue); + return true; + } else { + $field.css('background-color', 'red'); + return false; + } + // Exit if the newValue is below the minValue (only if the user tries to decrement) + } else if (delta <= 0 && newValue < minValue) { + + // Auto correct out of bounds values + if (plugin.settings.autoCorrectManualInput) { + $field.val(minValue); + return true; + } else { + $field.css('background-color', 'red'); + return false; + } + } else { + $field.css('background-color', ''); + } + $field.val(oldValue + delta); + return true; + }; + + /** + * Handle the keyup event on the field + */ + function handleKeyUpEventOnField(e) { + + // Load the max/min from the data properties of this event + var minValue = e.data.minValue; + var maxValue = e.data.maxValue; + var fieldName = e.data.fieldName; + + // Allow backspace and delete + if (e.keyCode === 8 || e.keyCode === 46) { + if($(this).val() >= minValue) { + + // Check if we are currently in cropping mode + if (typeof plugin.jcAPI !== 'undefined' && plugin.jcAPI !== null) { + plugin.setCropAreaByFieldValue(); + } else { + // 1. Normalize the size + plugin._setNormalizedFieldValues(fieldName); + // 2. Set the final size to the image + plugin.setSizeByFieldValue(); + } + } + // 0-9 keys + } else if (e.keyCode <= 57 && e.keyCode >= 48 || e.keyCode <= 105 && e.keyCode >= 96 ) { + if ($(this).val() >= minValue) { + + // Check if we are currently in cropping mode + if (typeof plugin.jcAPI !== 'undefined' && plugin.jcAPI !== null) { + plugin.setCropAreaByFieldValue(); + } else { + // 1. Normalize the size + plugin._setNormalizedFieldValues(fieldName); + // 2. Set the final size to the image + plugin.setSizeByFieldValue(); + } + } + } else { + var delta = 0; + if (e.keyCode === 38 || e.keyCode === 107) { + delta = +1; + } else if (e.keyCode === 40 || e.keyCode === 109) { + delta = -1; + } + // Handle key combinations + if (e.shiftKey || e.metaKey || e.ctrlKey) { + delta = delta * 10; + } + + // Only resize when field values are ok + if (updateField($(this), delta, maxValue, minValue)) { + // Check if we are currently in cropping mode + if (typeof plugin.jcAPI !== 'undefined' && plugin.jcAPI !== null) { + plugin.setCropAreaByFieldValue(); + } else { + // 1. Normalize the size + plugin._setNormalizedFieldValues(fieldName); + // 2. Set the final size to the image + plugin.setSizeByFieldValue(); + } + } + } + + e.preventDefault(); + return false; + } + + /** + * Handle the mouse wheel event on the field + */ + function handleMouseWheelEventOnField(e, delta) { + var minValue = e.data.minValue; + var maxValue = e.data.maxValue; + var fieldName = e.data.fieldName; + + // Handle key combinations + if (e.shiftKey || e.metaKey || e.ctrlKey) { + delta = delta * 10; + } + + // Only resize when field values are ok + if (updateField($(this), delta, maxValue, minValue)) { + + // Check if we are currently in cropping mode + if (typeof plugin.jcAPI !== 'undefined' && plugin.jcAPI !== null) { + plugin.setCropAreaByFieldValue(); + } else { + // 1. Normalize the size + plugin._setNormalizedFieldValues(fieldName); + // 2. Set the final size to the image + plugin.setSizeByFieldValue(); + } + } + return false; + } + + /** + * Handle mousewheel,keyup actions on both fields + */ + var $heightField = $('#' + plugin.ui.imgResizeHeightField.getInputId()); + var heightEventData = {fieldName: 'height', maxValue: plugin.ui.imgResizeHeightField.maxValue, minValue: plugin.ui.imgResizeHeightField.minValue }; + $heightField.live('keyup', heightEventData, handleKeyUpEventOnField); + $heightField.live('mousewheel', heightEventData, handleMouseWheelEventOnField); + + var $widthField = $('#' + plugin.ui.imgResizeWidthField.getInputId()); + var widthEventData = {fieldName: 'width', maxValue: plugin.ui.imgResizeWidthField.maxValue, minValue: plugin.ui.imgResizeWidthField.minValue}; + $widthField.live('keyup', widthEventData, handleKeyUpEventOnField); + $widthField.live('mousewheel', widthEventData, handleMouseWheelEventOnField); + + }, + + + /** + * This helper function will keep the aspect ratio for the field with the given name. + * + * @param {string} primaryFieldName What should be used as primary option to calculate (can be 'width' or 'height') + */ + _setNormalizedFieldValues: function (primaryFieldName) { + + var plugin = this; + var widthField = jQuery("#" + plugin.ui.imgResizeWidthField.getInputId()); + var heightField = jQuery("#" + plugin.ui.imgResizeHeightField.getInputId()); + var width = widthField.val(); + var height = heightField.val(); + + var size = plugin._normalizeSize(width, height, primaryFieldName); + + widthField.val(size.width); + heightField.val(size.height); + + }, + + /** + * Manually set the given size for the current image + */ + setSize: function (width, height) { + + var plugin = this; + plugin.imageObj.width(width); + plugin.imageObj.height(height); + var $wrapper = plugin.imageObj.closest('.Aloha_Image_Resize'); + $wrapper.height(height); + $wrapper.width(width); + + plugin._onResize(plugin.imageObj); + plugin._onResized(plugin.imageObj); + }, + + /** + * This method will handle the mouseUp event on images (eg. within editables). + * It will if enabled activate the resizing action. + */ + clickImage: function (e) { + + var plugin = this; + plugin.endResize(); // removes previous resize handler + plugin.imageObj = jQuery(e.target); + var currentImage = plugin.imageObj; + + // Ignore any images that are part of the ui (e.g. block edit and delete icons) + if (currentImage.hasClass('aloha-ui')) { + return; + } + + plugin.ui.setScope(); + + var editable = currentImage.closest('.aloha-editable'); + + // Disabling the content editable. This will disable the resizeHandles in internet explorer + // already done in resize on a smaller scope, this block next aloha-selection-change event + // to be thrown + // editable.contentEditable(false); + + //Store the current props of the image + this.restoreProps.push({ + obj : e.srcElement, + src : plugin.imageObj.attr('src'), + width : plugin.imageObj.width(), + height : plugin.imageObj.height() + }); + + // Update the resize input fields with the new width and height + $('#' + plugin.ui.imgResizeHeightField.getInputId()).val(plugin.imageObj.height()); + $('#' + plugin.ui.imgResizeWidthField.getInputId()).val(plugin.imageObj.width()); + + if (plugin.settings.ui.meta) { + plugin.ui.imgSrcField.setTargetObject(plugin.imageObj, 'src'); + plugin.ui.imgTitleField.setTargetObject(plugin.imageObj, 'title'); + plugin.ui.imgAltField.setTargetObject(plugin.imageObj, 'alt'); + } + Aloha.Selection.preventSelectionChanged(); + try { + plugin.ui.imgSrcField.focus(); + } catch(e) { + // FIXME for some reason execution breaks at this point + } + + if (plugin.settings.ui.resizable) { + plugin.startResize(); + } + + if (plugin.settings.autoResize) { + plugin.autoResize(); + } + + Aloha.Selection.preventSelectionChangedFlag = false; + Aloha.trigger('aloha-image-selected', e.target); + }, + + /** + * This method extracts determins if the range selection contains an image + * + * UNUSED as long as clickImage don't change the selection + * @see getPluginFocus instead + */ + findImgMarkup: function (range) { + + var plugin = this; + var config = this.config; + var result, targetObj; + + if (typeof range === 'undefined') { + range = Aloha.Selection.getRangeObject(); + } + + targetObj = jQuery(range.startContainer); + + try { + if (Aloha.activeEditable) { + if ((typeof range.startContainer !== 'undefined' && + typeof range.startContainer.childNodes !== 'undefined' && + typeof range.startOffset !== 'undefined' && + typeof range.startContainer.childNodes[range.startOffset] !== 'undefined' && + range.startContainer.childNodes[range.startOffset].nodeName.toLowerCase() === 'img' && + range.startOffset + 1 === range.endOffset) || + (targetObj.hasClass('Aloha_Image_Resize'))) + { + result = targetObj.find('img')[0]; + if (! result.css) { + result.css = ''; + } + + if (! result.title) { + result.title = ''; + } + + if (! result.src) { + result.src = ''; + } + + if (!result.alt) { + result.alt = ''; + } + return result; + } + else { + return null; + } + } + } catch (e) { + Aloha.Log.debug(e, "Error finding img markup."); + } + return null; + }, + /** + * Gets the plugin focus target + */ + getPluginFocus: function () { + return this.imageObj; + }, + + /** + * This helper function will calculate the new width and height while keeping + * the aspect ratio when the keepAspectRatio flag is set to true. The primarySize + * can be 'width' or 'height'. The function will first try to normalize the opposite size. + * + * @param {integer} width Target width for the new image size + * @param {integer} height Target height for the new image size + * @param {integer} primarySize can be 'width' or 'height' + * @return Image width and height. + */ + _normalizeSize: function( width, height, primarySize ) { + var that = this; + // Convert string values to numbers + width = parseInt(width); + height = parseInt(height); + + /** + * Inner function that calculates the new height by examining the width + */ + function handleHeight( callHandleWidth ) { + // Check whether the value is within bounds + if ( height > that.settings.maxHeight ) { + // Throw a notification event + var eventProps = { 'org': height, 'new': that.settings.maxHeight}; + $('body').trigger('aloha-image-resize-outofbounds', ["height", "max", eventProps]); + height = that.settings.maxHeight; + } else if ( height < that.settings.minHeight ) { + // Throw a notification event + var eventProps = { 'org': height, 'new': that.settings.minHeight}; + $('body').trigger('aloha-image-resize-outofbounds', ["height", "min", eventProps]); + height = that.settings.minHeight; + } + + if ( that.keepAspectRatio ) { + width = height * aspectRatio; + + // We don't want to invoke handleWidth again. This would mess up our previously calculated width + if ( callHandleWidth ) { + handleWidth( false ); + } + } + } + + /** + * Inner function that calculates the new width by examining the width + */ + function handleWidth( callHandleHeight ) { + + // Check whether the value is within bounds + if (width > that.settings.maxWidth) { + + // Throw a notification event + var eventProps = { 'org': width, 'new': that.settings.maxWidth}; + $('body').trigger('aloha-image-resize-outofbounds', ["width", "max", eventProps]); + + width = that.settings.maxWidth; + } else if ( width < that.settings.minWidth ) { + // Throw a notification event + var eventProps = { 'org': width, 'new': that.settings.minWidth}; + $('body').trigger('aloha-image-resize-outofbounds', ["width", "min", eventProps]); + + width = that.settings.minWidth; + } + + // Calculate the new height + if ( that.keepAspectRatio ) { + height = width / aspectRatio; + + // We don't want to invoke handleHeight again. This would mess up our previously calculated height + if ( callHandleHeight ) { + handleHeight( false ); + } + + } + + } + + // use the 4:3 ratio as default value. + var aspectRatio = 1.33333; + + // if keepAspectRatio is set to true, calculate it from the image size + if ( that.keepAspectRatio ) { + aspectRatio = width / height; + } + + if ( typeof that.startAspectRatio === 'number' ) { + aspectRatio = that.startAspectRatio; + } + + // Determin which size should be handled + if ( primarySize == 'width' ) { + handleWidth( true ); + } + + if ( primarySize == 'height' ) { + handleHeight( true ); + } + + // Floor the values return them + return { 'width': Math.floor( width ), 'height': Math.floor( height ) }; + }, + + /** + * Helper function that will set the new image size using the field values + */ + setSizeByFieldValue: function () { + var plugin = this; + var width = $('#' + plugin.ui.imgResizeWidthField.getInputId()).val(); + var height = $('#' + plugin.ui.imgResizeHeightField.getInputId()).val(); + plugin.setSize(width, height); + }, + + /** + * Helper function that will set the new crop area width and height using the field values + */ + setCropAreaByFieldValue: function () { + var plugin = this; + var currentCropArea = plugin.jcAPI.tellSelect(); + + var width = $('#' + plugin.ui.imgResizeWidthField.getInputId()).val(); + width = parseInt(width, 10); + var height = $('#' + plugin.ui.imgResizeHeightField.getInputId()).val(); + height = parseInt(height, 10); + + var selection = [currentCropArea['x'], currentCropArea['y'], currentCropArea['x'] + width,currentCropArea['y'] + height]; + plugin.jcAPI.setSelect(selection); + }, + + /** + * This method will insert a new image dom element into the dom tree + */ + insertImg: function () { + var range = Aloha.Selection.getRangeObject(), + config = this.getEditableConfig(Aloha.activeEditable.obj), + imagePluginUrl = Aloha.getPluginUrl('image'), + imagestyle, imagetag, newImg; + + if (range.isCollapsed()) { + // TODO I would suggest to call the srcChange method. So all image src + // changes are on one single point. + + // Create a div that allows the user to drop an image, upload, or provide a URL + var uploadBox = jQuery('
    '); + uploadBox.addClass('aloha-image-upload-drop-box aloha-ephemera-wrapper'); + uploadBox.attr('contentEditable', false); + uploadBox.append('Click to upload an image or drop one here'); + + + // Create upload form and add upload code for it + var $form = $( + '
    ', {method: 'POST', + enctype: 'multipart/form-data'}); + var $input = $('', {type: 'file', name: 'upload'}); + $form.hide().append($input).addClass('aloha-ephemera'); + uploadBox.append($form); + uploadBox.on('click', function(evt){ + uploadBox.find('span').remove(); + uploadBox.off('click'); + $form.show(); + }); + $input.on('change', function(evt){ + // Turn this into a drop event and let the relevant + // plugin handle it + Aloha.trigger('aloha-upload-file', {target: uploadBox[0], files: evt.target.files}); + }); + + GENTICS.Utils.Dom.insertIntoDOM(uploadBox, range, jQuery(Aloha.activeEditable.obj)); + + } else { + Aloha.Log.error('img cannot markup a selection'); + // TODO the desired behavior could be me the selected content is + // replaced by an image. + // TODO it should be editor's choice, with an NON-Ext Dialog instead of alert + + } + }, + + srcChange: function () { + // TODO the src changed. I suggest : + // 1. set an loading image (I suggest set src base64 enc) to show the user + // we are trying to load an image + // 2. start a request to get the image + // 3a. the image is ok change the src + // 3b. the image is not availbable show an error. + this.imageObj.attr('src', this.ui.imgSrcField.getValue()); // (the img tag) +// jQuery(img).attr('src', this.imgSrcField.getQueryValue()); // (the query value in the inputfield) +// this.imgSrcField.getItem(); // (optinal a selected resource item) + // TODO additionally implement an srcChange Handler to let implementer + // customize + }, + + /** + * Reposition the crop buttons below the crop area + */ + positionCropButtons: function() { + + var jt = jQuery('.jcrop-tracker:first'), + off = jt.offset(), + jtt = off.top, + jtl = off.left, + jth = jt.height(), + jtw = jt.width(); + + var oldLeft = 0, + oldTop = 0; + + var btns = jQuery('#aloha-CropNResize-btns'); + + // Hack to hide the buttons when the user just clicked into the image + if (jtt === 0 && jtl === 0) { + btns.hide(); + } + + // move the icons to the bottom right side + jtt = parseInt(jtt + jth + 3, 10); + jtl = parseInt(jtl + (jtw / 2) - (btns.width() / 2) + 10, 10); + + // comparison to old values hinders flickering bug in FF + if (oldLeft != jtl || oldTop != jtt) { + btns.offset({top: jtt, left: jtl}); + } + + oldLeft = jtl; + oldTop = jtt; + }, + + /** + * Code imported from CropnResize Plugin + * + */ + initCropButtons: function() { + var that = this, + btns; + + jQuery('body').append( + '
    ' + + '' + + '' + + '
    ' + ); + + btns = jQuery('#aloha-CropNResize-btns'); + + btns.find('.cnr-crop-apply').click(function () { + that.acceptCrop(); + }); + + btns.find('.cnr-crop-cancel').click(function () { + that.endCrop(); + }); + + this.interval = setInterval(function () { + that.positionCropButtons(); + }, 10); + }, + + /** + * Destroy crop confirm and cancel buttons + */ + destroyCropButtons: function () { + jQuery('#aloha-CropNResize-btns').remove(); + clearInterval(this.interval); + }, + + /** + * Helper function that will disable selectability of elements + */ + _disableSelection: function (el) { + el.find('*').attr('unselectable', 'on') + .css({ + '-moz-user-select':'none', + '-webkit-user-select':'none', + 'user-select':'none' + }); + /* + .each(function() { + this.onselectstart = function () { return false; }; + }); + */ + + }, + + /** + * Initiate a crop action + */ + crop: function () { + var plugin = this; + var config = this.config; + + plugin.initCropButtons(); + if (plugin.settings.ui.resizable) { + plugin.endResize(); + } + + plugin.jcAPI = jQuery.Jcrop(plugin.imageObj, { + onSelect : function () { + plugin._onCropSelect(); + // ugly hack to keep scope :( + window.setTimeout(function () { + plugin.ui.setScope(); + }, 10); + } + }); + + plugin._disableSelection($('.jcrop-holder')); + plugin._disableSelection($('#imageContainer')); + plugin._disableSelection($('#aloha-CropNResize-btns')); + $('body').trigger('aloha-image-crop-start', [plugin.imageObj]); + }, + + /** + * Internal on crop select method + */ + _onCropSelect: function () { + var plugin = this; + + jQuery('#aloha-CropNResize-btns').fadeIn('slow'); + + // Hide the crop buttons when the one of the handles is clicked + jQuery('.jcrop-handle').mousedown(function () { + jQuery('#aloha-CropNResize-btns').hide(); + }); + + jQuery('.jcrop-tracker').mousedown(function () { + jQuery('#aloha-CropNResize-btns').hide(); + }); + + // Update the width and height field using the intiial active crop area values + if (typeof plugin.jcAPI !== 'undefined' && plugin.jcAPI !== null) { + + plugin.positionCropButtons(); + var currentCropArea = plugin.jcAPI.tellSelect(); + + var widthField = jQuery("#" + plugin.ui.imgResizeWidthField.getInputId()).val(currentCropArea['w']); + var heightField = jQuery("#" + plugin.ui.imgResizeHeightField.getInputId()).val(currentCropArea['h']); + } + + }, + + + /** + * Terminates a crop + */ + endCrop: function () { + if (this.jcAPI) { + this.jcAPI.destroy(); + this.jcAPI = null; + } + + this.destroyCropButtons(); + this.ui._imageCropButton.setState(false); + + if (this.settings.ui.resizable) { + this.startResize(); + } + + if (this.keepAspectRatio) { + var currentRatio = this.imageObj.width() / this.imageObj.height(); + this.startAspectRatio = currentRatio; + } + + $('body').trigger('aloha-image-crop-stop', [this.imageObj]); + }, + + /** + * Accept the current cropping area and apply the crop + */ + acceptCrop: function () { + this._onCropped(this.imageObj, this.jcAPI.tellSelect()); + this.endCrop(); + }, + + /** + * This method will activate the jquery-ui resize functionality for the current image + */ + startResize: function () { + var plugin = this; + var currentImageObj = this.imageObj; + + currentImageObj = this.imageObj.css({ + height : this.imageObj.height(), + width : this.imageObj.width(), + position : 'relative', + 'max-height': '', + 'max-width' : '' + }); + + currentImageObj.resizable({ + maxHeight : plugin.settings.maxHeight, + minHeight : plugin.settings.minHeight, + maxWidth : plugin.settings.maxWidth, + minWidth : plugin.settings.minWidth, + aspectRatio : plugin.startAspectRatio, + handles: plugin.settings.handles, + grid : plugin.settings.grid, + resize: function (event, ui) { + plugin._onResize(plugin.imageObj); + }, + stop : function (event, ui) { + plugin._onResized(plugin.imageObj); + + // Workaround to finish cropping + if (this.enableCrop) { + window.setTimeout(function () { + plugin.ui.setScope(); + that.done(event); + }, 10); + } + } + + }); + + currentImageObj.css('display', 'inline-block'); + + // this will prevent the user from resizing an image + // using IE's resize handles + // however I could not manage to hide them completely + jQuery('.ui-wrapper') + .attr('contentEditable', false) + .addClass('aloha-ephemera-wrapper aloha-image-box-active Aloha_Image_Resize aloha') + .css({ + position: 'relative', + display: 'inline-block', + 'float': plugin.imageObj.css('float') + }) + .bind('resizestart', function (e) { + e.preventDefault(); + }) + .bind('mouseup', function (e) { + e.originalEvent.stopSelectionUpdate = true; + }); + }, + + /** + * This method will end resizing and toggle buttons accordingly and remove all markup that has been added for cropping + */ + endResize: function () { + // Find the nearest contenteditable and reenable it since resizing is finished + if (this.imageObj) { + var editable = this.imageObj.closest('.aloha-editable'); + //this.imageObj.contentEditable(true); + } + + if (this.imageObj && this.imageObj.is(":ui-resizable")) { + this.imageObj + .resizable('destroy') + .css({ + top : 0, + left : 0 + }); + } + }, + resetSize: function () { + var plugin = this, + img = new Image(); + img.onload = function () { + var myimage = plugin.getPluginFocus(); + if (plugin.settings.ui.resizable) { + plugin.endResize(); + } + jQuery(myimage).add(myimage.parent()).css({ + 'width': img.width + 'px', + 'height': img.height + 'px', + 'max-width': '', + 'max-height': '' + }); + if (plugin.settings.ui.resizable) { + plugin.resize(); + } + }; + img.src = plugin.getPluginFocus().attr('src'); + }, + /** + * Reset the image to it's original properties + */ + reset: function () { + if (this.settings.ui.crop) { + this.endCrop(); + } + + if (this.settings.ui.resizable) { + this.endResize(); + } + + if (this._onReset(this.imageObj)) { + // the external reset procedure has already performed a reset, so there is no need to apply an internal reset + return; + } + + for (var i = 0;i < this.restoreProps.length;i++) { + // restore from restoreProps if there is a match + if (this.imageObj.get(0) === this.restoreProps[i].obj) { + this.imageObj.attr('src', this.restoreProps[i].src); + this.imageObj.width(this.restoreProps[i].width); + this.imageObj.height(this.restoreProps[i].height); + return; + } + } + } + }); + +}); diff --git a/src/plugins/oerpub/video/nls/cz/i18n.js b/src/plugins/oerpub/video/nls/cz/i18n.js new file mode 100755 index 0000000000..9e0937fc7d --- /dev/null +++ b/src/plugins/oerpub/video/nls/cz/i18n.js @@ -0,0 +1,16 @@ +define({"button.addimg.tooltip":"Přidat obrázek", +"floatingmenu.tab.img":"Obrázek", +"button.uploadimg.tooltip":"Upload obrázek", +"button.uploadimg.label":"Upload", +"button.img.align.left.tooltip":"Zarovnat doleva", +"button.img.align.right.tooltip":"Zarovnání vpravo", +"button.img.align.none.tooltip":"Žádné vyrovnání", +"field.img.title.label":"", +"field.img.title.tooltip":"", +"field.img.src.label":"", +"field.img.src.tooltip":"", +"border ":" Přidat rámeček na obrázek", +"padding.increase ":" Zvětšit pole", +"padding.decrease ":" Omezují pole", +"size.increase ":" Zvětšit velikost", +"size.decrease ":" Zmenšit velikost"}); diff --git a/src/plugins/oerpub/video/nls/de/i18n.js b/src/plugins/oerpub/video/nls/de/i18n.js new file mode 100755 index 0000000000..82b0948d44 --- /dev/null +++ b/src/plugins/oerpub/video/nls/de/i18n.js @@ -0,0 +1 @@ +define({"button.addimg.tooltip":"Bild hinzuf\u00fcgen","floatingmenu.tab.img":"Bild","button.uploadimg.tooltip":"Bild hochladen","button.uploadimg.label":"Hochladen","button.img.align.left.tooltip":"Linksb\u00fcndig","button.img.align.right.tooltip":"Rechtsb\u00fcndig","button.img.align.none.tooltip":"Keine Ausrichtung","field.img.title.label":"Titel","field.img.title.tooltip":"Titel","field.img.src.label":"URL","field.img.src.tooltip":"URL","border":"Rahmen hinzuf\u00fcgen","padding.increase":"Abstand vergr\u00f6\u00dfern","padding.decrease":"Abstand verkleinern","size.increase":"Bild vergr\u00f6\u00dfern","size.decrease":"Bild verkleinern","height":"H\u00f6he","width":"Breite","button.toggle.tooltip": "Seitenverhältnis beibehalten aktivieren/deaktivieren"}); diff --git a/src/plugins/oerpub/video/nls/fr/i18n.js b/src/plugins/oerpub/video/nls/fr/i18n.js new file mode 100755 index 0000000000..f79273b239 --- /dev/null +++ b/src/plugins/oerpub/video/nls/fr/i18n.js @@ -0,0 +1 @@ +define({"size.natural": "Taille originale", "button.addimg.tooltip":"Ajouter une image","floatingmenu.tab.img":"Image","button.uploadimg.tooltip":"Envoyer une image","button.uploadimg.label":"Upload","button.img.align.left.tooltip":"Aligner \u00e0 gauche","button.img.align.right.tooltip":"Aligner \u00e0 droite","button.img.align.none.tooltip":"Sans alignement","field.img.title.label":"titre","field.img.title.tooltip":"Titre de l'image","field.img.src.label":"src","field.img.src.tooltip":"Adresse d'origine","border":"Add Border to Image","padding.increase":"Augmenter l'espace","padding.decrease":"Reduire l'espace","size.increase":"Augmenter la taille","size.decrease":"Reduire la taille","cnr.crop":"D\u00e9couper","Resize":"Redimensionner","Crop":"D\u00e9couper","Reset":"R\u00e9initialiser","Accept":"Valider","Cancel":"Annuler"}); diff --git a/src/plugins/oerpub/video/nls/i18n.js b/src/plugins/oerpub/video/nls/i18n.js new file mode 100755 index 0000000000..0a7c86421a --- /dev/null +++ b/src/plugins/oerpub/video/nls/i18n.js @@ -0,0 +1,7 @@ +define({ + root: {"size.natural": "Original size","button.addimg.tooltip":"add image ref","floatingmenu.tab.img":"Image","floatingmenu.tab.formatting":"Formatting","floatingmenu.tab.resize":"Resize","floatingmenu.tab.crop":"Crop","button.uploadimg.tooltip":"Upload img","button.uploadimg.label":"Upload","button.img.align.left.tooltip":"Left align","button.img.align.right.tooltip":"Right Align","button.img.align.none.tooltip":"No alignment","field.img.title.label":"Title","field.img.title.tooltip":"Title","field.img.src.label":"URL","field.img.src.tooltip":"Source","border":"Add Border to Image","padding.increase":"Increase Padding","padding.decrease":"Decrease Padding","size.increase":"Increase Size","size.decrease":"Decrease Size","Resize":"Resize","Crop":"Crop","Reset":"Reset","Accept":"Accept","Cancel":"Cancel","height":"Height","width":"Width","button.toggle.tooltip": "Toggle keep aspect ratio","field.img.alt.label": "Alternate text", "field.img.alt.tooltip": "Alternate text"}, + cz: true, + de: true, + fr: true, + ru: true +}); diff --git a/src/plugins/oerpub/video/nls/ru/i18n.js b/src/plugins/oerpub/video/nls/ru/i18n.js new file mode 100755 index 0000000000..aa5837fc2c --- /dev/null +++ b/src/plugins/oerpub/video/nls/ru/i18n.js @@ -0,0 +1,16 @@ +define({"button.addimg.tooltip":"Добавить изображение", +"floatingmenu.tab.img":"Изображение", +"button.uploadimg.tooltip":"Загрузить изображение", +"button.uploadimg.label":"Загрузка", +"button.img.align.left.tooltip":"Выравнивание по левому краю", +"button.img.align.right.tooltip":"Выравнивание по правому краю", +"button.img.align.none.tooltip":"Нет выравнивания", +"field.img.title.label":"", +"field.img.title.tooltip":"", +"field.img.src.label":"", +"field.img.src.tooltip":"", +"border ":"Добавить рамку к изображению", +"padding.increase ":"Увеличить поля", +"padding.decrease ":"Уменьшить поля", +"size.increase ":"Увеличить размер", +"size.decrease ":"Уменьшить размер"}); diff --git a/src/plugins/oerpub/video/package.json b/src/plugins/oerpub/video/package.json new file mode 100755 index 0000000000..0967ef424b --- /dev/null +++ b/src/plugins/oerpub/video/package.json @@ -0,0 +1 @@ +{} diff --git a/src/plugins/oerpub/video/test/test.css b/src/plugins/oerpub/video/test/test.css new file mode 100644 index 0000000000..edf6d5d0cf --- /dev/null +++ b/src/plugins/oerpub/video/test/test.css @@ -0,0 +1,12 @@ +#content { + margin-left: auto; + margin-right: auto; + position: relative; +} + +.ui-wrapper { + margin-left: auto !important; + margin-right: auto !important; + position: relative !important; + +} \ No newline at end of file diff --git a/src/plugins/oerpub/video/test/test.html b/src/plugins/oerpub/video/test/test.html new file mode 100644 index 0000000000..3ad19e1cbc --- /dev/null +++ b/src/plugins/oerpub/video/test/test.html @@ -0,0 +1,40 @@ + + + + + Aloha, Images! + + + + + + + + + + + +
    +
    + +
    +
    + + \ No newline at end of file diff --git a/src/plugins/oerpub/video/vendor/jcrop/jcrop.gif b/src/plugins/oerpub/video/vendor/jcrop/jcrop.gif new file mode 100755 index 0000000000000000000000000000000000000000..72ea7ccb5321d5384d70437cfaac73011237901e GIT binary patch literal 329 zcmZ?wbhEHb9b#5NV>2k zBC~b@b~P=nNfWAe-b%_i6tS^-1y(h@EsB~1TqDA_h@fkxG$bHgvj}VxE1JLgr!*!^ ILUxTc0Q$^Q5C8xG literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.css b/src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.css new file mode 100755 index 0000000000..06af882ded --- /dev/null +++ b/src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.css @@ -0,0 +1,46 @@ +/* Fixes issue here http://code.google.com/p/jcrop/issues/detail?id=1 */ +.jcrop-holder { text-align: left; } + +.jcrop-vline, .jcrop-hline +{ + font-size: 0; + position: absolute; + background: white url('jcrop.gif') top left repeat; +} +.jcrop-vline { height: 100%; width: 1px !important; } +.jcrop-hline { width: 100%; height: 1px !important; } +.jcrop-handle { + font-size: 1px; + width: 7px !important; + height: 7px !important; + border: 1px #eee solid; + background-color: #333; + *width: 9px; + *height: 9px; +} + +.cnr-crop-apply { + background-image: url(../../img/crop-buttons.gif) !important; + background-position: -2px -2px !important; +} + + +.cnr-crop-cancel { + background-image: url(../../img/crop-buttons.gif) !important; + background-position: 23px -2px !important; +} + +.jcrop-tracker { width: 100%; height: 100%; } + +.custom .jcrop-vline, +.custom .jcrop-hline +{ + background: yellow; +} +.custom .jcrop-handle +{ + border-color: black; + background-color: #C7BB00; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} diff --git a/src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.min.js b/src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.min.js new file mode 100755 index 0000000000..2cafe34f2a --- /dev/null +++ b/src/plugins/oerpub/video/vendor/jcrop/jquery.jcrop.min.js @@ -0,0 +1,165 @@ +define(["jquery"], function(jQuery){ +/** + * Jcrop v.0.9.8 (minimized) + * (c) 2008 Kelly Hallman and DeepLiquid.com + * More information: http://deepliquid.com/content/Jcrop.html + * Released under MIT License - this header must remain with code + */ + + +(function($){$.Jcrop=function(obj,opt) +{var obj=obj,opt=opt;if(typeof(obj)!=='object')obj=$(obj)[0];if(typeof(opt)!=='object')opt={};if(!('trackDocument'in opt)) +{opt.trackDocument=$.browser.msie?false:true;if($.browser.msie&&$.browser.version.split('.')[0]=='8') +opt.trackDocument=true;} +if(!('keySupport'in opt)) +opt.keySupport=$.browser.msie?false:true;var defaults={trackDocument:false,baseClass:'jcrop',addClass:null,bgColor:'black',bgOpacity:.6,borderOpacity:.4,handleOpacity:.5,handlePad:5,handleSize:9,handleOffset:5,edgeMargin:14,aspectRatio:0,keySupport:true,cornerHandles:true,sideHandles:true,drawBorders:true,dragEdges:true,boxWidth:0,boxHeight:0,boundary:8,animationDelay:20,swingSpeed:3,allowSelect:true,allowMove:true,allowResize:true,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){}};var options=defaults;setOptions(opt);var $origimg=$(obj);var $img=$origimg.clone().removeAttr('id').css({position:'absolute'});$img.width($origimg.width());$img.height($origimg.height());$origimg.after($img).hide();presize($img,options.boxWidth,options.boxHeight);var boundx=$img.width(),boundy=$img.height(),$div=$('
    ').width(boundx).height(boundy).addClass(cssClass('holder')).css({position:'relative',backgroundColor:options.bgColor}).insertAfter($origimg).append($img);;if(options.addClass)$div.addClass(options.addClass);var $img2=$('').attr('src',$img.attr('src')).css('position','absolute').width(boundx).height(boundy);var $img_holder=$('
    ').width(pct(100)).height(pct(100)).css({zIndex:310,position:'absolute',overflow:'hidden'}).append($img2);var $hdl_holder=$('
    ').width(pct(100)).height(pct(100)).css('zIndex',320);var $sel=$('
    ').css({position:'absolute',zIndex:300}).insertBefore($img).append($img_holder,$hdl_holder);var bound=options.boundary;var $trk=newTracker().width(boundx+(bound*2)).height(boundy+(bound*2)).css({position:'absolute',top:px(-bound),left:px(-bound),zIndex:290}).mousedown(newSelection);var xlimit,ylimit,xmin,ymin;var xscale,yscale,enabled=true;var docOffset=getPos($img),btndown,lastcurs,dimmed,animating,shift_down;var Coords=function() +{var x1=0,y1=0,x2=0,y2=0,ox,oy;function setPressed(pos) +{var pos=rebound(pos);x2=x1=pos[0];y2=y1=pos[1];};function setCurrent(pos) +{var pos=rebound(pos);ox=pos[0]-x2;oy=pos[1]-y2;x2=pos[0];y2=pos[1];};function getOffset() +{return[ox,oy];};function moveOffset(offset) +{var ox=offset[0],oy=offset[1];if(0>x1+ox)ox-=ox+x1;if(0>y1+oy)oy-=oy+y1;if(boundyboundx) +{xx=boundx;h=Math.abs((xx-x1)/aspect);yy=rh<0?y1-h:h+y1;}} +else +{xx=x2;h=rwa/aspect;yy=rh<0?y1-h:y1+h;if(yy<0) +{yy=0;w=Math.abs((yy-y1)*aspect);xx=rw<0?x1-w:w+x1;} +else if(yy>boundy) +{yy=boundy;w=Math.abs(yy-y1)*aspect;xx=rw<0?x1-w:w+x1;}} +if(xx>x1){if(xx-x1max_x){xx=x1+max_x;} +if(yy>y1){yy=y1+(xx-x1)/aspect;}else{yy=y1-(xx-x1)/aspect;}}else if(xxmax_x){xx=x1-max_x;} +if(yy>y1){yy=y1+(x1-xx)/aspect;}else{yy=y1-(x1-xx)/aspect;}} +if(xx<0){x1-=xx;xx=0;}else if(xx>boundx){x1-=xx-boundx;xx=boundx;} +if(yy<0){y1-=yy;yy=0;}else if(yy>boundy){y1-=yy-boundy;yy=boundy;} +return last=makeObj(flipCoords(x1,y1,xx,yy));};function rebound(p) +{if(p[0]<0)p[0]=0;if(p[1]<0)p[1]=0;if(p[0]>boundx)p[0]=boundx;if(p[1]>boundy)p[1]=boundy;return[p[0],p[1]];};function flipCoords(x1,y1,x2,y2) +{var xa=x1,xb=x2,ya=y1,yb=y2;if(x2xlimit)) +x2=(xsize>0)?(x1+xlimit):(x1-xlimit);if(ylimit&&(Math.abs(ysize)>ylimit)) +y2=(ysize>0)?(y1+ylimit):(y1-ylimit);if(ymin&&(Math.abs(ysize)0)?(y1+ymin):(y1-ymin);if(xmin&&(Math.abs(xsize)0)?(x1+xmin):(x1-xmin);if(x1<0){x2-=x1;x1-=x1;} +if(y1<0){y2-=y1;y1-=y1;} +if(x2<0){x1-=x2;x2-=x2;} +if(y2<0){y1-=y2;y2-=y2;} +if(x2>boundx){var delta=x2-boundx;x1-=delta;x2-=delta;} +if(y2>boundy){var delta=y2-boundy;y1-=delta;y2-=delta;} +if(x1>boundx){var delta=x1-boundy;y2-=delta;y1-=delta;} +if(y1>boundy){var delta=y1-boundy;y2-=delta;y1-=delta;} +return makeObj(flipCoords(x1,y1,x2,y2));};function makeObj(a) +{return{x:a[0],y:a[1],x2:a[2],y2:a[3],w:a[2]-a[0],h:a[3]-a[1]};};return{flipCoords:flipCoords,setPressed:setPressed,setCurrent:setCurrent,getOffset:getOffset,moveOffset:moveOffset,getCorner:getCorner,getFixed:getFixed};}();var Selection=function() +{var start,end,dragmode,awake,hdep=370;var borders={};var handle={};var seehandles=false;var hhs=options.handleOffset;if(options.drawBorders){borders={top:insertBorder('hline').css('top',$.browser.msie?px(-1):px(0)),bottom:insertBorder('hline'),left:insertBorder('vline'),right:insertBorder('vline')};} +if(options.dragEdges){handle.t=insertDragbar('n');handle.b=insertDragbar('s');handle.r=insertDragbar('e');handle.l=insertDragbar('w');} +options.sideHandles&&createHandles(['n','s','e','w']);options.cornerHandles&&createHandles(['sw','nw','ne','se']);function insertBorder(type) +{var jq=$('
    ').css({position:'absolute',opacity:options.borderOpacity}).addClass(cssClass(type));$img_holder.append(jq);return jq;};function dragDiv(ord,zi) +{var jq=$('
    ').mousedown(createDragger(ord)).css({cursor:ord+'-resize',position:'absolute',zIndex:zi});$hdl_holder.append(jq);return jq;};function insertHandle(ord) +{return dragDiv(ord,hdep++).css({top:px(-hhs+1),left:px(-hhs+1),opacity:options.handleOpacity}).addClass(cssClass('handle'));};function insertDragbar(ord) +{var s=options.handleSize,o=hhs,h=s,w=s,t=o,l=o;switch(ord) +{case'n':case's':w=pct(100);break;case'e':case'w':h=pct(100);break;} +return dragDiv(ord,hdep++).width(w).height(h).css({top:px(-t+1),left:px(-l+1)});};function createHandles(li) +{for(i in li)handle[li[i]]=insertHandle(li[i]);};function moveHandles(c) +{var midvert=Math.round((c.h/2)-hhs),midhoriz=Math.round((c.w/2)-hhs),north=west=-hhs+1,east=c.w-hhs,south=c.h-hhs,x,y;'e'in handle&&handle.e.css({top:px(midvert),left:px(east)})&&handle.w.css({top:px(midvert)})&&handle.s.css({top:px(south),left:px(midhoriz)})&&handle.n.css({left:px(midhoriz)});'ne'in handle&&handle.ne.css({left:px(east)})&&handle.se.css({top:px(south),left:px(east)})&&handle.sw.css({top:px(south)});'b'in handle&&handle.b.css({top:px(south)})&&handle.r.css({left:px(east)});};function moveto(x,y) +{$img2.css({top:px(-y),left:px(-x)});$sel.css({top:px(y),left:px(x)});};function resize(w,h) +{$sel.width(w).height(h);};function refresh() +{var c=Coords.getFixed();Coords.setPressed([c.x,c.y]);Coords.setCurrent([c.x2,c.y2]);updateVisible();};function updateVisible() +{if(awake)return update();};function update() +{var c=Coords.getFixed();resize(c.w,c.h);moveto(c.x,c.y);options.drawBorders&&borders['right'].css({left:px(c.w-1)})&&borders['bottom'].css({top:px(c.h-1)});seehandles&&moveHandles(c);awake||show();options.onChange(unscale(c));};function show() +{$sel.show();$img.css('opacity',options.bgOpacity);awake=true;};function release() +{disableHandles();$sel.hide();$img.css('opacity',1);awake=false;};function showHandles() +{if(seehandles) +{moveHandles(Coords.getFixed());$hdl_holder.show();}};function enableHandles() +{seehandles=true;if(options.allowResize) +{moveHandles(Coords.getFixed());$hdl_holder.show();return true;}};function disableHandles() +{seehandles=false;$hdl_holder.hide();};function animMode(v) +{(animating=v)?disableHandles():enableHandles();};function done() +{animMode(false);refresh();};var $track=newTracker().mousedown(createDragger('move')).css({cursor:'move',position:'absolute',zIndex:360}) +$img_holder.append($track);disableHandles();return{updateVisible:updateVisible,update:update,release:release,refresh:refresh,setCursor:function(cursor){$track.css('cursor',cursor);},enableHandles:enableHandles,enableOnly:function(){seehandles=true;},showHandles:showHandles,disableHandles:disableHandles,animMode:animMode,done:done};}();var Tracker=function() +{var onMove=function(){},onDone=function(){},trackDoc=options.trackDocument;if(!trackDoc) +{$trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp);} +function toFront() +{$trk.css({zIndex:450});if(trackDoc) +{$(document).mousemove(trackMove).mouseup(trackUp);}} +function toBack() +{$trk.css({zIndex:290});if(trackDoc) +{$(document).unbind('mousemove',trackMove).unbind('mouseup',trackUp);}} +function trackMove(e) +{onMove(mouseAbs(e));};function trackUp(e) +{e.preventDefault();e.stopPropagation();if(btndown) +{btndown=false;onDone(mouseAbs(e));options.onSelect(unscale(Coords.getFixed()));toBack();onMove=function(){};onDone=function(){};} +return false;};function activateHandlers(move,done) +{btndown=true;onMove=move;onDone=done;toFront();return false;};function setCursor(t){$trk.css('cursor',t);};$img.before($trk);return{activateHandlers:activateHandlers,setCursor:setCursor};}();var KeyManager=function() +{var $keymgr=$('').css({position:'absolute',left:'-30px'}).keypress(parseKey).blur(onBlur),$keywrap=$('
    ').css({position:'absolute',overflow:'hidden'}).append($keymgr);function watchKeys() +{if(options.keySupport) +{$keymgr.show();$keymgr.focus();}};function onBlur(e) +{$keymgr.hide();};function doNudge(e,x,y) +{if(options.allowMove){Coords.moveOffset([x,y]);Selection.updateVisible();};e.preventDefault();e.stopPropagation();};function parseKey(e) +{if(e.ctrlKey)return true;shift_down=e.shiftKey?true:false;var nudge=shift_down?10:1;switch(e.keyCode) +{case 37:doNudge(e,-nudge,0);break;case 39:doNudge(e,nudge,0);break;case 38:doNudge(e,0,-nudge);break;case 40:doNudge(e,0,nudge);break;case 27:Selection.release();break;case 9:return true;} +return nothing(e);};if(options.keySupport)$keywrap.insertBefore($img);return{watchKeys:watchKeys};}();function px(n){return''+parseInt(n)+'px';};function pct(n){return''+parseInt(n)+'%';};function cssClass(cl){return options.baseClass+'-'+cl;};function getPos(obj) +{var pos=$(obj).offset();return[pos.left,pos.top];};function mouseAbs(e) +{return[(e.pageX-docOffset[0]),(e.pageY-docOffset[1])];};function myCursor(type) +{if(type!=lastcurs) +{Tracker.setCursor(type);lastcurs=type;}};function startDragMode(mode,pos) +{docOffset=getPos($img);Tracker.setCursor(mode=='move'?mode:mode+'-resize');if(mode=='move') +return Tracker.activateHandlers(createMover(pos),doneSelect);var fc=Coords.getFixed();var opp=oppLockCorner(mode);var opc=Coords.getCorner(oppLockCorner(opp));Coords.setPressed(Coords.getCorner(opp));Coords.setCurrent(opc);Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect);};function dragmodeHandler(mode,f) +{return function(pos){if(!options.aspectRatio)switch(mode) +{case'e':pos[1]=f.y2;break;case'w':pos[1]=f.y2;break;case'n':pos[0]=f.x2;break;case's':pos[0]=f.x2;break;} +else switch(mode) +{case'e':pos[1]=f.y+1;break;case'w':pos[1]=f.y+1;break;case'n':pos[0]=f.x+1;break;case's':pos[0]=f.x+1;break;} +Coords.setCurrent(pos);Selection.update();};};function createMover(pos) +{var lloc=pos;KeyManager.watchKeys();return function(pos) +{Coords.moveOffset([pos[0]-lloc[0],pos[1]-lloc[1]]);lloc=pos;Selection.update();};};function oppLockCorner(ord) +{switch(ord) +{case'n':return'sw';case's':return'nw';case'e':return'nw';case'w':return'ne';case'ne':return'sw';case'nw':return'se';case'se':return'nw';case'sw':return'ne';};};function createDragger(ord) +{return function(e){if(options.disabled)return false;if((ord=='move')&&!options.allowMove)return false;btndown=true;startDragMode(ord,mouseAbs(e));e.stopPropagation();e.preventDefault();return false;};};function presize($obj,w,h) +{var nw=$obj.width(),nh=$obj.height();if((nw>w)&&w>0) +{nw=w;nh=(w/$obj.width())*$obj.height();} +if((nh>h)&&h>0) +{nh=h;nw=(h/$obj.height())*$obj.width();} +xscale=$obj.width()/nw;yscale=$obj.height()/nh;$obj.width(nw).height(nh);};function unscale(c) +{return{x:parseInt(c.x*xscale),y:parseInt(c.y*yscale),x2:parseInt(c.x2*xscale),y2:parseInt(c.y2*yscale),w:parseInt(c.w*xscale),h:parseInt(c.h*yscale)};};function doneSelect(pos) +{var c=Coords.getFixed();if(c.w>options.minSelect[0]&&c.h>options.minSelect[1]) +{Selection.enableHandles();Selection.done();} +else +{Selection.release();} +Tracker.setCursor(options.allowSelect?'crosshair':'default');};function newSelection(e) +{if(options.disabled)return false;if(!options.allowSelect)return false;btndown=true;docOffset=getPos($img);Selection.disableHandles();myCursor('crosshair');var pos=mouseAbs(e);Coords.setPressed(pos);Tracker.activateHandlers(selectDrag,doneSelect);KeyManager.watchKeys();Selection.update();e.stopPropagation();e.preventDefault();return false;};function selectDrag(pos) +{Coords.setCurrent(pos);Selection.update();};function newTracker() +{var trk=$('
    ').addClass(cssClass('tracker'));$.browser.msie&&trk.css({opacity:0,backgroundColor:'white'});return trk;};function animateTo(a) +{var x1=a[0]/xscale,y1=a[1]/yscale,x2=a[2]/xscale,y2=a[3]/yscale;if(animating)return;var animto=Coords.flipCoords(x1,y1,x2,y2);var c=Coords.getFixed();var animat=initcr=[c.x,c.y,c.x2,c.y2];var interv=options.animationDelay;var x=animat[0];var y=animat[1];var x2=animat[2];var y2=animat[3];var ix1=animto[0]-initcr[0];var iy1=animto[1]-initcr[1];var ix2=animto[2]-initcr[2];var iy2=animto[3]-initcr[3];var pcent=0;var velocity=options.swingSpeed;Selection.animMode(true);var animator=function() +{return function() +{pcent+=(100-pcent)/velocity;animat[0]=x+((pcent/100)*ix1);animat[1]=y+((pcent/100)*iy1);animat[2]=x2+((pcent/100)*ix2);animat[3]=y2+((pcent/100)*iy2);if(pcent<100)animateStart();else Selection.done();if(pcent>=99.8)pcent=100;setSelectRaw(animat);};}();function animateStart() +{window.setTimeout(animator,interv);};animateStart();};function setSelect(rect) +{setSelectRaw([rect[0]/xscale,rect[1]/yscale,rect[2]/xscale,rect[3]/yscale]);};function setSelectRaw(l) +{Coords.setPressed([l[0],l[1]]);Coords.setCurrent([l[2],l[3]]);Selection.update();};function setOptions(opt) +{if(typeof(opt)!='object')opt={};options=$.extend(options,opt);if(typeof(options.onChange)!=='function') +options.onChange=function(){};if(typeof(options.onSelect)!=='function') +options.onSelect=function(){};};function tellSelect() +{return unscale(Coords.getFixed());};function tellScaled() +{return Coords.getFixed();};function setOptionsNew(opt) +{setOptions(opt);interfaceUpdate();};function disableCrop() +{options.disabled=true;Selection.disableHandles();Selection.setCursor('default');Tracker.setCursor('default');};function enableCrop() +{options.disabled=false;interfaceUpdate();};function cancelCrop() +{Selection.done();Tracker.activateHandlers(null,null);};function destroy() +{$div.remove();$origimg.show();};function interfaceUpdate(alt) +{options.allowResize?alt?Selection.enableOnly():Selection.enableHandles():Selection.disableHandles();Tracker.setCursor(options.allowSelect?'crosshair':'default');Selection.setCursor(options.allowMove?'move':'default');$div.css('backgroundColor',options.bgColor);if('setSelect'in options){setSelect(opt.setSelect);Selection.done();delete(options.setSelect);} +if('trueSize'in options){xscale=options.trueSize[0]/boundx;yscale=options.trueSize[1]/boundy;} +xlimit=options.maxSize[0]||0;ylimit=options.maxSize[1]||0;xmin=options.minSize[0]||0;ymin=options.minSize[1]||0;if('outerImage'in options) +{$img.attr('src',options.outerImage);delete(options.outerImage);} +Selection.refresh();};$hdl_holder.hide();interfaceUpdate(true);var api={animateTo:animateTo,setSelect:setSelect,setOptions:setOptionsNew,tellSelect:tellSelect,tellScaled:tellScaled,disable:disableCrop,enable:enableCrop,cancel:cancelCrop,focus:KeyManager.watchKeys,getBounds:function(){return[boundx*xscale,boundy*yscale];},getWidgetSize:function(){return[boundx,boundy];},release:Selection.release,destroy:destroy};$origimg.data('Jcrop',api);return api;};$.fn.Jcrop=function(options) +{function attachWhenDone(from) +{var loadsrc=options.useImg||from.src;var img=new Image();img.onload=function(){$.Jcrop(from,options);};img.src=loadsrc;};if(typeof(options)!=='object')options={};this.each(function() +{if($(this).data('Jcrop')) +{if(options=='api')return $(this).data('Jcrop');else $(this).data('Jcrop').setOptions(options);} +else attachWhenDone(this);});return this;};})(jQuery); +}); diff --git a/src/plugins/oerpub/video/vendor/mousewheel/mousewheel.js b/src/plugins/oerpub/video/vendor/mousewheel/mousewheel.js new file mode 100644 index 0000000000..a79c290099 --- /dev/null +++ b/src/plugins/oerpub/video/vendor/mousewheel/mousewheel.js @@ -0,0 +1,85 @@ +/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.6 + * + * Requires: 1.2.2+ + */ +define(['jquery'],function(jQuery){ +(function($) { + +var types = ['DOMMouseScroll', 'mousewheel']; + +if ($.event.fixHooks) { + for ( var i=types.length; i; ) { + $.event.fixHooks[ types[--i] ] = $.event.mouseHooks; + } +} + +$.event.special.mousewheel = { + setup: function() { + if ( this.addEventListener ) { + for ( var i=types.length; i; ) { + this.addEventListener( types[--i], handler, false ); + } + } else { + this.onmousewheel = handler; + } + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i=types.length; i; ) { + this.removeEventListener( types[--i], handler, false ); + } + } else { + this.onmousewheel = null; + } + } +}; + +$.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); + }, + + unmousewheel: function(fn) { + return this.unbind("mousewheel", fn); + } +}); + + +function handler(event) { + var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; + event = $.event.fix(orgEvent); + event.type = "mousewheel"; + + // Old school scrollwheel delta + if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; } + if ( orgEvent.detail ) { delta = -orgEvent.detail/3; } + + // New school multidimensional scroll (touchpads) deltas + deltaY = delta; + + // Gecko + if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { + deltaY = 0; + deltaX = -1*delta; + } + + // Webkit + if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } + if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } + + // Add event and delta to the front of the arguments + args.unshift(event, delta, deltaX, deltaY); + + return ($.event.dispatch || $.event.handle).apply(this, args); +} + +})(jQuery); +}); diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100755 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEr#)R9Ln2z=UU%d=WFXS=@V?HT z#xG*`>Yvsgk=}99w^d^D^d*@m74oMo<%#FcopJf?u00-~YVKV2wzrI*_R6;UORMea zBFVSEnN~eiVA6V&z`E)YLz5Aok^D)In}Yn=OzDpgR5Wv0XfT8pOkmV{sKAJ-PO9#T zZK}IXj&Q-V!U)!LcB_3K0&C*{ literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100755 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcmVbvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQj@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQY-ImG zFPf9b{J;c_6SHRK%WcbN_hZpM=(Ry;4Rxv2@@2Y=$K57eF$X$=!PC{xWt~$(69B)$ BI)4BF literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~` zFlmZ}YMcJY=eo?o%*@I?2`NblNeMudl#t?{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100755 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..f1273672d253263b7564e9e21d69d7d9d0b337d9 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%l7LV~E7mxPQ=F85a&M@g_{ d|GeK{$Y5lo%PMu^>wln`44$rjF6*2UngE4^EGqy2 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_222222_256x240.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_228ef1_256x240.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..a641a371afa0fbb08ba599dc7ddf14b9bfc3c84f GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@e{{5C=l}o! literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ef8c08_256x240.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..85e63e9f604ce042d59eb06a8428eeb7cb7896c9 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ffd27a_256x240.png b/src/plugins/oerpub/video/vendor/ui/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..e117effa3dca24e7978cfc5f8b967f661e81044f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 From 4453e6f10a7c5314ae80d445fea518b9ec5e840f Mon Sep 17 00:00:00 2001 From: Max Grossman Date: Sat, 2 Feb 2013 11:40:51 -0600 Subject: [PATCH 02/67] push visual changes to editor --- oerpub/index.html | 1 + src/plugins/oerpub/assorted/lib/image.js | 36 ++++++++++++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/oerpub/index.html b/oerpub/index.html index d4afaa5062..5981312890 100644 --- a/oerpub/index.html +++ b/oerpub/index.html @@ -335,6 +335,7 @@
    + \n

    Insert image

    \n
    \n
    \n \n'; - showModalDialog = function($el) { + IMAGE_DIALOG_HTML = ''; + VIDEO_DIALOG_HTML = ''; + showModalDialog = function($el, DIALOG_HTML) { var $placeholder, $submit, $uploadImage, $uploadUrl, deferred, dialog, imageAltText, imageSource, loadLocalFile, root, setImageSource, settings, _this = this; settings = Aloha.require('assorted/assorted-plugin').settings; @@ -143,7 +144,7 @@ $bubble.find('.change').on('click', function() { var promise; Aloha.activeEditable = editable; - promise = showModalDialog($el); + promise = showModalDialog($el, IMAGE_DIALOG_HTML); promise.done(function(data) { if (data.files.length) { jQuery(data.target).addClass('aloha-image-uploading'); @@ -200,7 +201,32 @@ var newEl, promise; newEl = jQuery(' '); GENTICS.Utils.Dom.insertIntoDOM(newEl, Aloha.Selection.getRangeObject(), Aloha.activeEditable.obj); - promise = showModalDialog(newEl); + promise = showModalDialog(newEl, IMAGE_DIALOG_HTML); + promise.done(function(data) { + if (data.files.length) { + newEl.addClass('aloha-image-uploading'); + return uploadImage(data.files[0], function(url) { + jQuery(data.target).attr('src', url); + return newEl.removeClass('aloha-image-uploading'); + }); + } + }); + promise.fail(function(data) { + var $target; + $target = jQuery(data.target); + if (!$target.is('img')) { + return $target.remove(); + } + }); + return promise.show(); + } + }); + UI.adopt('insertVideo-oer', null, { + click: function() { + var newEl, promise; + newEl = jQuery(' '); + GENTICS.Utils.Dom.insertIntoDOM(newEl, Aloha.Selection.getRangeObject(), Aloha.activeEditable.obj); + promise = showModalDialog(newEl, VIDEO_DIALOG_HTML); promise.done(function(data) { if (data.files.length) { newEl.addClass('aloha-image-uploading'); From a12590edde0c51d24f6d746e9b8663d675e45790 Mon Sep 17 00:00:00 2001 From: Max Grossman Date: Sat, 2 Feb 2013 16:44:26 -0600 Subject: [PATCH 03/67] visual portion of the video plugin --- src/plugins/oerpub/assorted/lib/image.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/oerpub/assorted/lib/image.js b/src/plugins/oerpub/assorted/lib/image.js index 2014485624..f3445ca0e5 100644 --- a/src/plugins/oerpub/assorted/lib/image.js +++ b/src/plugins/oerpub/assorted/lib/image.js @@ -5,7 +5,7 @@ var VIDEO_DIALOG_HTML, IMAGE_DIALOG_HTML, WARNING_IMAGE_PATH, populator, selector, showModalDialog, uploadImage, showModalVideoDialog; WARNING_IMAGE_PATH = '/../plugins/oerpub/image/img/warning.png'; IMAGE_DIALOG_HTML = ''; - VIDEO_DIALOG_HTML = ''; + VIDEO_DIALOG_HTML = ''; showModalDialog = function($el, DIALOG_HTML) { var $placeholder, $submit, $uploadImage, $uploadUrl, deferred, dialog, imageAltText, imageSource, loadLocalFile, root, setImageSource, settings, _this = this; @@ -14,7 +14,7 @@ dialog = jQuery(DIALOG_HTML); $placeholder = dialog.find('.placeholder.preview'); $uploadImage = dialog.find('.upload-image-input').hide(); - $uploadUrl = dialog.find('.upload-url-input').hide(); + $uploadUrl = dialog.find('.upload-url-input'); $submit = dialog.find('.action.insert'); if ($el.is('img')) { imageSource = $el.attr('src'); @@ -28,6 +28,7 @@ $uploadUrl.val(imageSource); $uploadUrl.show(); } + /* (function(img, baseurl) { return img.onerror = function() { var errimg; @@ -37,6 +38,7 @@ } }; })(dialog.find('.placeholder.preview img')[0], Aloha.settings.baseUrl); + */ setImageSource = function(href) { imageSource = href; return $submit.removeClass('disabled'); From 2c7147a5e94123c6f27c4393489f9e05ff05045a Mon Sep 17 00:00:00 2001 From: root Date: Sat, 2 Feb 2013 16:54:14 -0600 Subject: [PATCH 04/67] Adding js for processing video urls --- src/plugins/oerpub/video/js/embed.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/plugins/oerpub/video/js/embed.js diff --git a/src/plugins/oerpub/video/js/embed.js b/src/plugins/oerpub/video/js/embed.js new file mode 100644 index 0000000000..c5bcfce202 --- /dev/null +++ b/src/plugins/oerpub/video/js/embed.js @@ -0,0 +1,9 @@ +function ytVidId(url) { + var p = /^(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?(?=.*v=((\w|-){11}))(?:\S+)?$/; + return (url.match(p)) ? RegExp.$1 : false; +} + +function test(url) { + test_url = http://www.youtube.com/watch?v=_K46OCFPjHU; + console.log(ytVidId(url)); +} From 94cec3c9021e02c1e7534247c9cee076364aaeb4 Mon Sep 17 00:00:00 2001 From: Max Grossman Date: Sat, 2 Feb 2013 16:56:53 -0600 Subject: [PATCH 05/67] remove unused code from video dialog --- src/plugins/oerpub/assorted/lib/image.js | 37 ------------------------ 1 file changed, 37 deletions(-) diff --git a/src/plugins/oerpub/assorted/lib/image.js b/src/plugins/oerpub/assorted/lib/image.js index f3445ca0e5..15f8819308 100644 --- a/src/plugins/oerpub/assorted/lib/image.js +++ b/src/plugins/oerpub/assorted/lib/image.js @@ -13,7 +13,6 @@ root = Aloha.activeEditable.obj; dialog = jQuery(DIALOG_HTML); $placeholder = dialog.find('.placeholder.preview'); - $uploadImage = dialog.find('.upload-image-input').hide(); $uploadUrl = dialog.find('.upload-url-input'); $submit = dialog.find('.action.insert'); if ($el.is('img')) { @@ -28,17 +27,6 @@ $uploadUrl.val(imageSource); $uploadUrl.show(); } - /* - (function(img, baseurl) { - return img.onerror = function() { - var errimg; - errimg = baseurl + WARNING_IMAGE_PATH; - if (img.src !== errimg) { - return img.src = errimg; - } - }; - })(dialog.find('.placeholder.preview img')[0], Aloha.settings.baseUrl); - */ setImageSource = function(href) { imageSource = href; return $submit.removeClass('disabled'); @@ -57,32 +45,11 @@ }; return reader.readAsDataURL(file); }; - dialog.find('.upload-image-link').on('click', function(evt) { - evt.preventDefault(); - $placeholder.hide(); - $uploadUrl.hide(); - $uploadImage.click(); - return $uploadImage.show(); - }); dialog.find('.upload-url-link').on('click', function(evt) { evt.preventDefault(); $placeholder.hide(); - $uploadImage.hide(); return $uploadUrl.show(); }); - $uploadImage.on('change', function() { - var $previewImg, files; - files = $uploadImage[0].files; - if (files.length > 0) { - if (settings.image.preview) { - $previewImg = $placeholder.find('img'); - loadLocalFile(files[0], $previewImg); - return $placeholder.show(); - } else { - return loadLocalFile(files[0]); - } - } - }); $uploadUrl.on('change', function() { var $previewImg, url; $previewImg = $placeholder.find('img'); @@ -107,10 +74,6 @@ $el.replaceWith(img); $el = img; } - deferred.resolve({ - target: $el[0], - files: $uploadImage[0].files - }); return dialog.modal('hide'); }); dialog.on('click', '.btn.action.cancel', function(evt) { From 928c345370cc6cecf46addf4e1903a08fe0e7860 Mon Sep 17 00:00:00 2001 From: Max Grossman Date: Sat, 2 Feb 2013 17:19:15 -0600 Subject: [PATCH 06/67] add separate video plugin files --- src/plugins/oerpub/assorted/lib/image.coffee | 2 +- src/plugins/oerpub/assorted/lib/image.js | 92 ++++--- src/plugins/oerpub/assorted/lib/video.coffee | 243 +++++++++++++++++++ src/plugins/oerpub/assorted/lib/video.js | 195 +++++++++++++++ 4 files changed, 483 insertions(+), 49 deletions(-) create mode 100644 src/plugins/oerpub/assorted/lib/video.coffee create mode 100644 src/plugins/oerpub/assorted/lib/video.js diff --git a/src/plugins/oerpub/assorted/lib/image.coffee b/src/plugins/oerpub/assorted/lib/image.coffee index 84fc4e9391..bb0cb4d307 100644 --- a/src/plugins/oerpub/assorted/lib/image.coffee +++ b/src/plugins/oerpub/assorted/lib/image.coffee @@ -11,7 +11,7 @@ define ['aloha', 'jquery', 'popover', 'ui/ui', 'css!assorted/css/image.css'], (A