diff --git a/addons/product/data/img/accessory1.jpg b/addons/product/data/img/accessory1.jpg new file mode 100644 index 00000000000..145c5761c59 Binary files /dev/null and b/addons/product/data/img/accessory1.jpg differ diff --git a/addons/product/data/img/accessory2.jpg b/addons/product/data/img/accessory2.jpg new file mode 100644 index 00000000000..58c190b7c35 Binary files /dev/null and b/addons/product/data/img/accessory2.jpg differ diff --git a/addons/product/data/img/bose.jpg b/addons/product/data/img/bose.jpg new file mode 100644 index 00000000000..c4379e369b0 Binary files /dev/null and b/addons/product/data/img/bose.jpg differ diff --git a/addons/product/data/img/ipad.png b/addons/product/data/img/ipad.png new file mode 100644 index 00000000000..4e3f072df2d Binary files /dev/null and b/addons/product/data/img/ipad.png differ diff --git a/addons/product/data/img/ipad_mini.jpg b/addons/product/data/img/ipad_mini.jpg new file mode 100644 index 00000000000..ad58a7b2976 Binary files /dev/null and b/addons/product/data/img/ipad_mini.jpg differ diff --git a/addons/product/data/img/ipod.png b/addons/product/data/img/ipod.png new file mode 100644 index 00000000000..7508b319bc6 Binary files /dev/null and b/addons/product/data/img/ipod.png differ diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml index 033e6bdcfa5..eb8e8bd21b5 100644 --- a/addons/product/product_demo.xml +++ b/addons/product/product_demo.xml @@ -6,7 +6,7 @@ - @@ -227,7 +227,7 @@ HDD SH-1 - PC Assemble SC349 + iPad Retina Display PCSC349 @@ -236,14 +236,13 @@ HDD SH-1 consu - 19" LCD Monitor -Processor Core i5 2.70 Ghz -2GB RAM -HDD SH-1 + 7.9‑inch (diagonal) LED-backlit, 128Gb +Dual-core A5 with quad-core graphics +FaceTime HD Camera, 1.2 MP Photos - PC Assemble + Custom (PC on Demand) + Bose Mini Bluetooth Speaker PC-DEM @@ -253,9 +252,11 @@ HDD SH-1 Custom computer assembled on order based on customer's requirement. + Bose's smallest portable Bluetooth speaker + iPad Mini 15” LCD Monitor LCD15 @@ -278,7 +279,7 @@ HDD SH-1 - USB Keyboard, QWERTY + iPod Accessory KeyQ @@ -311,7 +312,7 @@ HDD SH-1 - Mouse, Laser + iPod M-Las diff --git a/addons/product/product_image_demo.xml b/addons/product/product_image_demo.xml index 1167f2382c2..b4c1776559d 100644 --- a/addons/product/product_image_demo.xml +++ b/addons/product/product_image_demo.xml @@ -1,6 +1,6 @@ - + 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 @@ -19,23 +19,23 @@ - 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LzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiB4bWxuczp4bXBNTT0naHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyc+CiAgPHhtcE1NOkRvY3VtZW50SUQgcmRmOnJlc291cmNlPSd1dWlkOkEzMTk1Qjc2RDZCNkRCMTE4NDUyODQ5RDk4RDI2MDBFJyAvPgogIDx4bXBNTTpJbnN0YW5jZUlEPnV1aWQ6QTQxOTVCNzZENkI2REIxMTg0NTI4NDlEOThEMjYwMEU8L3htcE1NOkluc3RhbmNlSUQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnhtcD0naHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyc+CiAgPHhtcDpDcmVhdGVEYXRlPjIwMDctMDItMDhUMDE6MDk6MTgrMDc6MDA8L3htcDpDcmVhdGVEYXRlPgogIDx4bXA6TW9kaWZ5RGF0ZT4yMDA3LTAyLTA4VDAxOjEwOjIyKzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDA3LTAyLTA4VDAxOjEwOjIyKzA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogIDx4bXA6Q3JlYXRvclRvb2w+QWRvYmUgUGhvdG9zaG9wIENTMiBXaW5kb3dzPC94bXA6Q3JlYXRvclRvb2w+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmRjPSdodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyc+CiAgPGRjOmZvcm1hdD5pbWFnZS9qcGVnPC9kYzpmb3JtYXQ+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnBob3Rvc2hvcD0naHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyc+CiAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICA8cGhvdG9zaG9wOkhpc3Rvcnk+PC9waG90b3Nob3A6SGlzdG9yeT4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24geG1sbnM6dGlmZj0naHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8nPgogIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogIDx0aWZmOk5hdGl2ZURpZ2VzdD4yNTYsMjU3LDI1OCwyNTksMjYyLDI3NCwyNzcsMjg0LDUzMCw1MzEsMjgyLDI4MywyOTYsMzAxLDMxOCwzMTksNTI5LDUzMiwzMDYsMjcwLDI3MSwyNzIsMzA1LDMxNSwzMzQzMjsyM0ZCRkEzMDRDQzlCQzRDQTczMTZBMkM3NjIyMzJCOTwvdGlmZjpOYXRpdmVEaWdlc3Q+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCiA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOmV4aWY9J2h0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvJz4KICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTAwPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MzAxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICA8ZXhpZjpDb2xvclNwYWNlPi0xPC9leGlmOkNvbG9yU3BhY2U+CiAgPGV4aWY6TmF0aXZlRGlnZXN0PjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDs1OTRBQjdBRDc0NTNBQkE0NUIxMTM0RDQ2Q0E5NTcxMTwvZXhpZjpOYXRpdmVEaWdlc3Q+CiA8L3JkZjpEZXNjcmlwdGlvbj4KCjwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjw/eHBhY2tldCBlbmQ9J3InPz4K/9sAQwAGBAQEBQQGBQUGCQYFBgkLCAYGCAsMCgoLCgoMEAwMDAwMDBAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/9sAQwEHBwcNDA0YEBAYFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAagCvAwERAAIRAQMRAf/EABwAAAICAwEBAAAAAAAAAAAAAAACAwQBBQcIBv/EAEwQAAIBAwIDAggICgcIAwAAAAECAwQFEQASBiExEyIHCBQyQVFh0hUWI1VxkpTTQkVSVmKBkaGi0RgkM1NyscM0RHOCg5OywSVks//EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/EAB4RAQEBAAICAwEAAAAAAAAAAAARAQIhMWESQXGh/9oADAMBAAIRAxEAPwD1ToDQGgWR0jjZ3YKiAszHoAOZJ9gGg41Z7j4XPCXTyXuy3yk4S4Vmklit8aQCrrpVikKF5txRYmJXGI5hjBBQgCSQLY8FXhai78PhOqWkHRZaLcmfaPKOn6joKstq8ZuzSmanu1r4jp05JTSJHC7j1sOypyv6qqQ/56CCbw9cYcMuq8d8FVVFTZCyXGi78O49AmS8LFj5qtVRufyScao3NL4y/gsni3tU1sBAyVlopwRj0ZVWXP0MdQS/0j/BV2e83CoH6Jo6kHl9KasFEeM1wNU1Hktnt13vNUfNgoaRZHPtKdoJQPb2ekGyg8JPhFuChrdwBPHG3mSV9dBTMB6N0TqHHtBII6ddQbAVXhoqoty0/DtuJGQss1ZVsPYwRIFBH6Mjj26DSXGm8ZKJzNRV/DFSq5Pk7JVRbh6hlW5/TKo9baC7wB4S+Jq3iOXhHjeyCy8RCDyqjlgPaUlVEvJzG26QBkxnAkkGAwYowVXDpOdBp77xjwtYI1kvF0p6LerNEksgEkmwAsI4xl5GG5e6isxLAAEkaD5+3+Gnwc3C4U9vo7m0tVVSpDCnk9QoMkjBFGWjA5swGc49ZxoPs6arp6lN8DiROm5emlEugNAaA0BoDQLLGksbxuoZHBVlPQgjBB+kaDiNL4HfClwhcao+D7ianjstS5kFuuKsdpPoPyc0bMAAO1RYXZQqvkLkhsm4f8ZapUrJxLZqIH8KCAu37ZIGH8I/VoKp8B/hBurh+I/CLXyxPymo6VXVCP0WMixqT6xTcvboL9H4s3g5jZXrnuF0cfhVdTuJ/Wiof2EaDaJ4vXgeQ5HDy7vyjU1hP0gmbIPqI6dRpRpeJ/Fi8HNxoClngktFcmTFP201TGx9CypPI5ZPR8m8bAY7xChdKPl+H/AfwpVVNVZZjPw9xVRxiSSiK0tfb54ydq1dNHVQt28DMMOjMJoGPZSnJV3DYS+BTjS3MRS0nCd9hGArT2wWqQ+slaEbM+0Pz64HTQK1gqaFHN48EUsqx4AqLRc0nEh9JWDtUmRfVkE+vGghMnCZ2pH4I+I2lYgBXjnVQT63MxUD29NBsOEvAsbvxA9+4nscVgtsULRW/h6mrJ5p97nnNUVUcvIhchY4WCuGBkCGMrIo+5PgZ8Hp/wBxqR6eVxuI/wAqjQfJ3XxZODZYJPgitrbdUsjAGSTyqJmwApkSTvkDHMRyRkg4JwFADV8OeLbdbRf6C6PxHBIlFUw1PZJQurN2EgkChjUMBuKgZKtjOcNjGmjtlvonpUZWlMpY53EAY6nHp9fr6YGpmC1qg0BoDQGgNAaA0BoDQGgNAaD5DwlUM6WePiSgX/5bhljcKYqO9JAg/rdMfSVqKcMuzIBlWFsgorAPq6eeKogjnhYPFKoeN15hlYZBB9RBBGgkwNAYGgNAaA0BoDQGgNAaCCvrYKGhqK2obbT0sTzTN1wkalmOPYAdByD+lLwTnlaroR6Dspvv9BkeNHwWfxTdPqU33+kDDxoODD+Krp9Sm+/0gYeM5wafxVc/qU/3+rA48Zjg4/iu5/Up/vtSBx4ynCB/Fdy+pT/fasDDxkOET+K7l9Sn++0gceMXwmelsuP1ab77SaGHjEcKH8WXH6tP99pBWu3h54XrrVW0aW6vDVMEsKllp9oMiFRnExOOfPAJ9h0grcLeHHh20cMWe1VNBXy1NvoaalnlRYCjSQwrG5UtKGKllJBYKSMEgHlpBtP6Q3Cnpttx+rT/AH2kGD4w/CfzdcfqU/32kCnxi+ER1t1x+pT/AH2kCHxkODh1t1y+pT/faQIfGV4MH4tuf1Kf7/SBD4zXBY62y5/Up/v9SBT4z3BPzZdP+3T/AH+gU+NDwQPxZdPqU33+rBNb/GY4IrLhTUfkFyhNTKkImkjg2KZGCgttmZtoJ54UkDJwdQdc0HyvhWrfI/BtxLN0ZrfPCp9TToYVP6i40HijcApJOFHMk8gBqjC1dJkf1iPn+mNBItXR8/6xF9df56CZKyiwD5RF9df56CdK2gzjyqH2nev89BPHW0JOBUxEk4ADqSSeXLnqi4uqJkA9WgkGglj5+nQSdwennoMHb9OgQ7fVoIZANBUl66CtIBporvrIgfPoGgiY6BDM8JE8Zw8R3of0l5j940Hv2CZJ4Y5ozlJFDofWGGR+46g594f6gw+Cu7qORlamj/bURn/JdB46rEEsHYBDJJMypHGDjLlgVGTkAAjLHB7oPI6o101muNPRR1c2BT1CiWCclzuQ8gyYjwQc4808+XI6B57HcIqVJpXSKJkWQNuYsyyeacBCQeYAAAI5ZGckhaqOHbrFXiKZoUnmkKRwBpCod1LADah5BcspZiowM55aQPFw7dGmajEsRqQrTMcyEhIhhsns9gA69NxwcEgHSCWn4duFRUvTxywuadN8yfK7CFwWyzQkE99dyKcAMAFA5aQbqmjvcglWJaVlpSsczlqjAZlDKNxi5kqQeWfbg60GSW7mkNXmjFODIN5aoH9kcPy7HJwehAw34JOgknmvMFLFUyikWGaNZYj/AFosyOcKQggL8zkY25BByBg6CWZr5TrE0oo0E2zs8tVEntDheQgJ6nny7oyWwASAkqBfYKyKikFEtZMSI4i9Uc7V3HmKfAG3mCWAPoJOgSM32Wqakj8haoSMyugeq5IG2k5NPt5EgEA5GQcY56Badr5UzywQGiaWFdzjdVgYxk4Y04VsDmwUnb6caCOFOIKuOeSn8kljpmKTupq8IVXccnybAG3nu83rzyCAFRmvDUK1+aM0r79km6q5mM4cAGnDZU8iMZ9nMZgxS0vElbTyVNJTRzwwllmdFq+4UGWDZgBXC94lgBt59NBQgjvZtQr1jSahBYeWMZyuQTkFuyHNcEBSN2B0PM6vLbt6z1lmfl3d/uhJYL69sFyFOot+Fk8rTt9m3ftGT2RwCw2kEA5OPSAZmz35yb47zcvU28b8uPcuZc3OhmWl4gSlirGok8lnKrFNmUKxkxsUMY9oZ8jZuIz+8QRxyrNEsijCuAcHqM9QfaOh9ug91cC1Rq+C7DUsctNbqV3P6RhXP786g+B8ZurMHg4jiB/2q4U8R+hUkl/0tB5QkkMdRTSDrFIZB/yIx1rBTqraKezwTzVMnks0YPYKE3BQBgHKj0EcwxOMZ9sFi50r04EElXI8LMq7Y+y5ksNuCUzjOOZ6+nQTVlv2V9LSSXCWQvOEgmUIqBjlA53RqwUBiTlQQM5XIxoJGt6i90dMblIaio3RLUHsxHGoOSWzGMAhA4YZwuM4OV0Dx0gNzjoY66ZKyoDSmocRBcBcbG7nL+yAU4I3MNzAZIoeloWa7VFLFcpVqDD5VNMwhCsFCRhRlRlwCAFAySpxk4yBSW+GWrrbWlyqESHnLJtj2OJD3mU9nvGcl+8q4GQAThdMFm1UkM9S1O1wlSlppEjIkCbNhd0Dd1DKUXssthd+CvdJYgAlJRy18MzrXzLDA5iKSLEDkxkhhtBJC8uv4W0EEE6CKlp5K23fCMlwqF7JHki3JFkYUkjug82A2jPIFhkjqAPJx5ALz5fUFhHIGXZFuCRt0I27eZUkEMT+VjloJGFTS2tbvR3OqjkMYeRowquRK6hVbzRle6e6SMHOS2QAileuoaOStF0quxrislQqhCXeVACW5gEkAKwOeYwToEktM9Fb2cVM4oVR5dpjQEpkuQG9OckA/wAtBJFaqqsqLlJR1ZiSCV3liKBuZ7zFSB0zgd4ggn1ZIDUUNLPJRMKerYUy717Mqm8Ad5s45cyxC+0HIAxmBFpXezdotYz0wR90IQbwiqOZPmkMPNwScqdwXu5Bo45UghqPKjJHTvDJ2ewAjEi7QT9IVjtyMcsg8gFmkUiEqfwXkX9jtj92g9t+CCqFV4M+HZQc4o0jP0xExn96nUHOfGuritk4foM92armqSPbBEIx+6oOg8y1zbRn8mGd8f4Yz/PVFiayXSptWKm8U/YU0SmGiZl7VkZhkIse4BlJBZZGR8EHawDFQWIXO70FS1Xcy0tJUh6enFOC0jsoeSTeuMbQEyrZDDmByJATU4ud2pHvNRdSbnS1jSU0K0yksVAd5SwwgVMc1ZWGAoC7N5UEp5LtV0FJfXur/CFIahqdVgX5IK5bduBVT2jvKzd1iuOeQyjQPFBdVtMHElNc3a4RwTrUItMNsMLEw4LElCsokK52jaW28yynVBVJeaK3pf6e4s9VU0iR1p8nXaqytgRHJKHKojhgoJJx5ytqBrr8NWoPeKS6PLVV3ZGsl7BUHan5UL1K9148qQF3bd20FcCi3cTf+HqpZ7beGlNZVRiaqMAXfMrPKH7+4hkaQ5APMndnBGgV477aJ6WlpLrspa6oG+RqZSN2VhMqh9x3YfO0FcEL0YAgB6O626rp7DDd9loq2mRZfJgQUMZRnVWJfEgiC43AoTjOQ2QiFv4gjrvi7T1b+SV8DfJrTKZHhdjIQOrFcxbiwfC4bBwG0EBo7q9S9glrwKKOAMoFOmSEIYKSO/yJHeLkkKA3dwBJ9BUpLvca6osr1yGGkWAoXjijyAg2jcxUgLkDG/LgbmyeemizdbNdqW21Ha3JJYzFIWjRYm3Kq8wWRm259B6kdMgcqK1LFXT19a1NV+T/ACiZXslkHyibi2WPLBCgDHeBJ/BOQq2ejrHoqgw1oidJWj7LsQ2QdxLbicA5GAvUgkjkpzBDb6SslsckkNZsTZIjQdkCNqoCB2hOMuSVwOa4B6MNQJHFVNaXkWqBQRmR4ezGdqDcAGznmB1xke3VGwhOGmHqmkH8Wf8A3oPYXi8VoqfBRakzl6WWrhf7TI6/wOmoOdeNhUbrjw3Tf3cNVJ/3GiX/AE9B52uDc3HXFPIuP+Myxj/PVG1k4ZtYp+3W9yNDvCFCcS8wST2Wd2By73NDkjeCMGway10VK1yqaeeqqooRTNInYOoJnOETeTtGzHnkZYgejORMEtstURrLlQzVFUjQ4WCKB0IMzsVbdjIYEDGUznOQSMZDNntUMy3OjkqatZoZY4aSGGROxJZj2gfqDk7du3Kkk7jjB0D2OzxV9BVwtU1IKVJhhiWRVi7NV3MGVh1JKkcwORyNxB0GbPaqe42KoaWrq2mhmcpB2iCn8nhiLEndz7RTyRQDkEhe/gMGKe3Q1nDJqHq6yWoiEkhieRTCBFu5gEZyFA9P5QA6ZCWW1dtw75Ya2snqqZZZpEkkXs02uI1ZAckt03EYOWUAHaWIPdLYDw9DcYKyslkhig7Zp5UKxyyyA/JDzgDjl+ECpJ9GgivNAYrHHcoa2rkmRICJJpASkjrlwmOYUsXxg5IA3YOdND3q2VFHTQXOCrrEk7WOFZ5Jg0i9wttVgqMAckjAAwcZY5JaC+WpqOup54qmrVZqg05ladJJQoIBTeoXftX8IKEYkHoQNNDVdsa23qgmWWdzVtMsjTSK5YRBVUErgnbnHPK8ht6Z00bO4DdbqoH0xSf+J1RqLIlRLV1r01XWUrCGnkZ6WbshgrECX5ZYZcKoByGOea51BXs9EkgrKbyqqjIqdgEUgVGCFwWcY5vlgVPtcerQLY6apktcqR1dZAjSNHLHFJthOVIAZR1YgHOfOUEejQQW35S1sn5cDKR9Kkf+9MFmmkDtMw6O4kH0PGjf+zoPVXitVXacBV8BOTDc5do9SvBCR/EG1B8H41VVu40tVNn+ytwk/wC5PIP9PVwcFr2RnnV8bGSnQ5OOs+48/RyX9WNBaqrdwoFBpZ2lbPmP8mMc+eRM/PzeWPSefLmGtuFJao6VzTkdqPNxIxPX/EeWgs3ylsSwI1CETvRo2Jmd+SgO572ArNk4x3Tyz6SDXqk4fSWnkolRIJJkR4hO0jBFChyWJ5KxJKnHLBA5KMg9xpeH47lQvTpH5JJKgmgE7t3EC7t53ZQSHdjvZAyAe6GIPU0XDkd+omCo1slZpJadaliwjBOEeQEYcgY3ADPXAzjQZFLw5HxJSdtGJrYyl6iBKh0z5+FMuTtbkvMZ9GRkkaB6Sl4cg4lj8vjSrtxh7WSFKkojSN3gDIhbaRkb05MMFcKeYDFPb7Gl6mjm7OWnETmNhUEJ2mIyrK27DEbiWTqRlSAR3QaG2WGO8XKCURPBEMUxSpJjU5XcUYP8qOZUDccZ3HzToC3Wyxtc6+mnMBRZRHTOalljx2hQlH3AOmMZYnkvf3DqQq22gsEk9clbP2axystLtJkDIGxyPaLyCjk3e3dM886YFrKOxR3Kliik3UjsyzSBm3beRB2l+RHMAbxu6Z550EklBYRdoIWOKR4SZNrsxDBuuC45lfRuAwNBJBRWmqutfExR4YkTyZ3nEJCoqZIy4DsF7uwMzAdMlRkKttorU81ckoUrFIRCxm2YTfjujcDJkEZwSQMscgE6YJbRa7XUiqRxGeymbZI9SsQ7FSwACs6b8907lJII553ggFs9LaZqN0mpmmmJZY5+2dQoHIdwcmAwccxnPPpoC3N3QP8A69N+0R7T/wCOqPT3inVW+z8QUuecdRBJj/iIw/09ZHP/ABma4VHhRkiB/wBioKaA+wkvN/lMDqjjk8kC1G6o/sO2hWXP5AVyRzBHPPpBGghM1iN1gbYvkIfMijbnbtPLdt25J6EoQDjIOoGjmsfwvC8m0UILdptCk7emOY2lsdCRt3erQWFm4UHEW9Vb4IEZADrH2hPd67QY93XB6Y5ZzqhYJ+GxfJ3ZAbaUcQBtinmw27jtZdwXOcDBPQ6giiuFhprvUSrTo9FIuIEdVfHMHnhVBPLqFGqNgOI+GB/uEB/6K/y0DDiXhbGPg+D6OxX+WqKE1wsdXeKaQQRw0SDEyhFQE972YyQRgkHmBnIGoLtFU8MJf9zpTtbVjO2Oc/J7yOeTGvnHAwQoHmhjjOgYT8Mm4V+5IDB3fIym3ssjO4jeqsRyGMhW5DcPUEFG/DzU061DwRsGnaLcgJxs3RgZI7rt3QQDsyzYbzdBXmksTcPKqqnwiEQE93ORjcAPP3es+1uuRqCWuksGacwCHaZk7UDbuMe078kDku4DqOXLOeeqEkew+Xw8ojTGOXeFKedy7PJ83qefp2hsDONBiI2dq2qz5P2JiHZs/JdwCkhNvLecEAHunLZI5agxusoPMwftU6CCiS1O9SZnp0VXLRGTI3Lz7qYBXHPnux0GCBuBCe0VlHCzBpURBI+3JAG3ccYz7NBi3v5hByDHjPsSRgP3HVHonxSa9Rd+JKAnvTU9LOg9kLyo3/7LqDn3h/qll8L3ERU91Hpox9KUcKt/EG1RztgGJIYruGGAwQcdMhgRy9eM+3QCpjofp7sfuaCQKfyv4Ivc0Eiq3Tdy/wAEXuaB1T0b/wBWyL3NBKqtgDfy642Re57BoHCt/efwRe5oJF3/AN7/AAQ+5oHDSAY7Y4/wQ/d6DPymMdqcf4Ifu9ArJuxukzjplIfu9AbMfhjl0PZwHp/0/RoFKnr2nP19nD93oE24B7459cRxe5oEZRjG/l/gi9zQRmNT+F06dyP3NBG8MZHNv4I/c0ETU8XrB/5Ivc0ETU0PpwfpSL3NAyAIeuTgAE4GAOgAGAB9AH+Wg7H4q1aI/CXUwseVTa6hFH6SzQSD+FH1B834x3DN9sHhIuNxq42NsvUnlNvrQDsfKDfET0EkTAqUJyYwkmAHwFHLfLz69KGFwb1jSjIuD+saUOLi/rGlDC5v69KM/Cz+zShxeJPZpQfDMvs0oYXmX2aUN8My+z9+lB8NSj0DSgN5kPq/bpQpvMvpA0ox8LyeoaUYN1f2aUIbo/s0owbk/s0oQ3Bj6tKMGuY9TpQprc9TpR3LxUOG7zX8bS8SLEVs1tglgkqjyV6iVQFhT8plRjI5GdgCBsGRMqPWFbb6CvgNNXU0VXTsQWhnRZEJHMEqwIJB5jly0Gu+JXBvzDbvskHuaA+JfB3zDbvskHuaA+JfB3zDbvskHuaA+JfB3zDbvskHuaA+JXB3zDbvskHuaA+JXBvzDbvskHuaA+JXBvzDbvskHuaA+JPBvzDbvskHuaA+JPBnzDbvskHuaDHxJ4M+YLd9kg9zQHxI4L+YLb9kg9zQHxI4L+YLb9kg9zQHxI4L+YLb9kg9zQHxH4K/N+2/Y4Pc0GPiPwV+b9t+xwe5oD4j8Ffm/bfscHuaA+I3BP5v237HB7mgPiNwT+b9t+xwe5oD4jcE/m/bfscHuagPiNwT+b9t+xwe5qja0dHR0VMlLRwR01NFyighRY0UE5IVVAUAkk8h1JOg/9k= + @@ -47,7 +47,7 @@ - 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 + diff --git a/addons/website/__openerp__.py b/addons/website/__openerp__.py index dcea2ba3327..b17d79407ca 100644 --- a/addons/website/__openerp__.py +++ b/addons/website/__openerp__.py @@ -17,5 +17,6 @@ OpenERP Website CMS 'views/res_config.xml', 'website_data.xml', 'website_view.xml', + 'security/ir.model.access.csv', ], } diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 5d3ea7ed7f1..5cd2891d868 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -156,7 +156,7 @@ class Website(openerp.addons.web.controllers.main.Home): 'name': v.name, 'id': v.id, 'header': False, - 'active': v.inherit_id.id == v.inherit_option_id.id + 'active': (v.inherit_id.id == v.inherit_option_id.id) or (not optional and v.inherit_id.id) }) return result diff --git a/addons/website/security/ir.model.access.csv b/addons/website/security/ir.model.access.csv new file mode 100644 index 00000000000..d2c3d4ee534 --- /dev/null +++ b/addons/website/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_website_public,website,website.model_website,base.group_public,1,0,0,0 +access_website,website,website.model_website,base.group_user,1,0,0,0 \ No newline at end of file diff --git a/addons/website/static/description/icon.png b/addons/website/static/description/icon.png new file mode 100644 index 00000000000..aaa760360be Binary files /dev/null and b/addons/website/static/description/icon.png differ diff --git a/addons/website/static/description/index.html b/addons/website/static/description/index.html index af0829ce38d..c5d2ac85a91 100644 --- a/addons/website/static/description/index.html +++ b/addons/website/static/description/index.html @@ -7,7 +7,7 @@
- +
@@ -45,7 +45,7 @@
- +
@@ -56,7 +56,7 @@

Awsome. Astonishingly Beautiful.

Professional themes and building blocks

- +

@@ -86,16 +86,16 @@ references, "our team" page, blogs, newsletters, etc.

Traditional eCommerce and CMS have poor backends as it's not their - core focus. The OpenERP integration allows you to benefit from the + core focus. With the OpenERP integration, you benefit from the best management software to follow-up on your orders, your jobs applicants, your leads, etc.

- You don't need anymore to synchronize your management software and - your ecommerce. + You don't have to synchronize your management software and + your ecommerce. It works out-of-the-box.

- +
@@ -106,7 +106,7 @@

Responsive content on all pages

- +
@@ -139,7 +139,7 @@
- +
@@ -182,18 +182,41 @@ CSS and our modularity allows to distribute your themes easily.

The building block approach allows the website to remain clean - after the end-users start creating new contents. + after the end-users start creating new contents. The template + editor allows advanced customization without development.

- +
+
+

Fuild Grid Layouting

+

Organize building blocks easily

+
+
+ +
+
+
+

+ Design perfect pages by drag and droping building blocks and scale + them to fit the layout you are looking for. +

+ Building blocks are based on a responsive, mobile friendly fluid + grid system that appropriately scales up to 12 columns as the + device or viewport size increases. +

+
+
+
+ +

Fully Integrated With Others Apps

Get hundreds of open source apps for free

diff --git a/addons/website/static/description/website_edit.png b/addons/website/static/description/website_edit.png new file mode 100644 index 00000000000..c199d1f40d8 Binary files /dev/null and b/addons/website/static/description/website_edit.png differ diff --git a/addons/website/static/description/website_editor.png b/addons/website/static/description/website_editor.png new file mode 100644 index 00000000000..87723ede0f1 Binary files /dev/null and b/addons/website/static/description/website_editor.png differ diff --git a/addons/website/static/description/website_events.png b/addons/website/static/description/website_events.png new file mode 100644 index 00000000000..cb9c12245fc Binary files /dev/null and b/addons/website/static/description/website_events.png differ diff --git a/addons/website/static/description/website_grid.png b/addons/website/static/description/website_grid.png new file mode 100644 index 00000000000..ad063c2cb3c Binary files /dev/null and b/addons/website/static/description/website_grid.png differ diff --git a/addons/website/static/description/website_home.png b/addons/website/static/description/website_home.png new file mode 100644 index 00000000000..5d9f8634574 Binary files /dev/null and b/addons/website/static/description/website_home.png differ diff --git a/addons/website/static/description/website_mobile.png b/addons/website/static/description/website_mobile.png new file mode 100644 index 00000000000..60b40ea910f Binary files /dev/null and b/addons/website/static/description/website_mobile.png differ diff --git a/addons/website/static/description/website_seo.png b/addons/website/static/description/website_seo.png new file mode 100644 index 00000000000..7cb74e19878 Binary files /dev/null and b/addons/website/static/description/website_seo.png differ diff --git a/addons/website/static/description/website_theme.png b/addons/website/static/description/website_theme.png new file mode 100644 index 00000000000..a5955b29a60 Binary files /dev/null and b/addons/website/static/description/website_theme.png differ diff --git a/addons/website/static/lib/bootstrap/css/bootstrap.css b/addons/website/static/lib/bootstrap/css/bootstrap.css index 6845714fc94..75fe40edd05 100644 --- a/addons/website/static/lib/bootstrap/css/bootstrap.css +++ b/addons/website/static/lib/bootstrap/css/bootstrap.css @@ -41,7 +41,7 @@ code,kbd,pre,samp { pre { white-space:pre-wrap} q { - quotes:"\\201C" "\\201D" "\\2018" "\\2019"} + quotes:"\201C" "\201D" "\2018" "\2019"} small { font-size:80%} sub,sup { @@ -340,7 +340,7 @@ blockquote small { line-height:1.428571429; color:#999} blockquote small:before { - content:'\\2014 \\00A0'} + content:'\2014 \00A0'} blockquote.pull-right { padding-right:15px; padding-left:0; @@ -351,7 +351,7 @@ blockquote.pull-right p,blockquote.pull-right small { blockquote.pull-right small:before { content:''} blockquote.pull-right small:after { - content:'\\00A0 \\2014'} + content:'\00A0 \2014'} q:before,q:after,blockquote:before,blockquote:after { content:""} address { @@ -856,7 +856,7 @@ input[type="search"] { box-sizing:border-box} input[type="radio"],input[type="checkbox"] { margin:4px 0 0; - margin-top:1px \\9; + margin-top:1px \9; line-height:normal} input[type="file"] { display:block} @@ -1230,405 +1230,405 @@ input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button" font-weight:normal; line-height:1} .glyphicon-asterisk:before { - content:"\\2a"} + content:"\2a"} .glyphicon-plus:before { - content:"\\2b"} + content:"\2b"} .glyphicon-euro:before { - content:"\\20ac"} + content:"\20ac"} .glyphicon-minus:before { - content:"\\2212"} + content:"\2212"} .glyphicon-cloud:before { - content:"\\2601"} + content:"\2601"} .glyphicon-envelope:before { - content:"\\2709"} + content:"\2709"} .glyphicon-pencil:before { - content:"\\270f"} + content:"\270f"} .glyphicon-glass:before { - content:"\\e001"} + content:"\e001"} .glyphicon-music:before { - content:"\\e002"} + content:"\e002"} .glyphicon-search:before { - content:"\\e003"} + content:"\e003"} .glyphicon-heart:before { - content:"\\e005"} + content:"\e005"} .glyphicon-star:before { - content:"\\e006"} + content:"\e006"} .glyphicon-star-empty:before { - content:"\\e007"} + content:"\e007"} .glyphicon-user:before { - content:"\\e008"} + content:"\e008"} .glyphicon-film:before { - content:"\\e009"} + content:"\e009"} .glyphicon-th-large:before { - content:"\\e010"} + content:"\e010"} .glyphicon-th:before { - content:"\\e011"} + content:"\e011"} .glyphicon-th-list:before { - content:"\\e012"} + content:"\e012"} .glyphicon-ok:before { - content:"\\e013"} + content:"\e013"} .glyphicon-remove:before { - content:"\\e014"} + content:"\e014"} .glyphicon-zoom-in:before { - content:"\\e015"} + content:"\e015"} .glyphicon-zoom-out:before { - content:"\\e016"} + content:"\e016"} .glyphicon-off:before { - content:"\\e017"} + content:"\e017"} .glyphicon-signal:before { - content:"\\e018"} + content:"\e018"} .glyphicon-cog:before { - content:"\\e019"} + content:"\e019"} .glyphicon-trash:before { - content:"\\e020"} + content:"\e020"} .glyphicon-home:before { - content:"\\e021"} + content:"\e021"} .glyphicon-file:before { - content:"\\e022"} + content:"\e022"} .glyphicon-time:before { - content:"\\e023"} + content:"\e023"} .glyphicon-road:before { - content:"\\e024"} + content:"\e024"} .glyphicon-download-alt:before { - content:"\\e025"} + content:"\e025"} .glyphicon-download:before { - content:"\\e026"} + content:"\e026"} .glyphicon-upload:before { - content:"\\e027"} + content:"\e027"} .glyphicon-inbox:before { - content:"\\e028"} + content:"\e028"} .glyphicon-play-circle:before { - content:"\\e029"} + content:"\e029"} .glyphicon-repeat:before { - content:"\\e030"} + content:"\e030"} .glyphicon-refresh:before { - content:"\\e031"} + content:"\e031"} .glyphicon-list-alt:before { - content:"\\e032"} + content:"\e032"} .glyphicon-flag:before { - content:"\\e034"} + content:"\e034"} .glyphicon-headphones:before { - content:"\\e035"} + content:"\e035"} .glyphicon-volume-off:before { - content:"\\e036"} + content:"\e036"} .glyphicon-volume-down:before { - content:"\\e037"} + content:"\e037"} .glyphicon-volume-up:before { - content:"\\e038"} + content:"\e038"} .glyphicon-qrcode:before { - content:"\\e039"} + content:"\e039"} .glyphicon-barcode:before { - content:"\\e040"} + content:"\e040"} .glyphicon-tag:before { - content:"\\e041"} + content:"\e041"} .glyphicon-tags:before { - content:"\\e042"} + content:"\e042"} .glyphicon-book:before { - content:"\\e043"} + content:"\e043"} .glyphicon-print:before { - content:"\\e045"} + content:"\e045"} .glyphicon-font:before { - content:"\\e047"} + content:"\e047"} .glyphicon-bold:before { - content:"\\e048"} + content:"\e048"} .glyphicon-italic:before { - content:"\\e049"} + content:"\e049"} .glyphicon-text-height:before { - content:"\\e050"} + content:"\e050"} .glyphicon-text-width:before { - content:"\\e051"} + content:"\e051"} .glyphicon-align-left:before { - content:"\\e052"} + content:"\e052"} .glyphicon-align-center:before { - content:"\\e053"} + content:"\e053"} .glyphicon-align-right:before { - content:"\\e054"} + content:"\e054"} .glyphicon-align-justify:before { - content:"\\e055"} + content:"\e055"} .glyphicon-list:before { - content:"\\e056"} + content:"\e056"} .glyphicon-indent-left:before { - content:"\\e057"} + content:"\e057"} .glyphicon-indent-right:before { - content:"\\e058"} + content:"\e058"} .glyphicon-facetime-video:before { - content:"\\e059"} + content:"\e059"} .glyphicon-picture:before { - content:"\\e060"} + content:"\e060"} .glyphicon-map-marker:before { - content:"\\e062"} + content:"\e062"} .glyphicon-adjust:before { - content:"\\e063"} + content:"\e063"} .glyphicon-tint:before { - content:"\\e064"} + content:"\e064"} .glyphicon-edit:before { - content:"\\e065"} + content:"\e065"} .glyphicon-share:before { - content:"\\e066"} + content:"\e066"} .glyphicon-check:before { - content:"\\e067"} + content:"\e067"} .glyphicon-move:before { - content:"\\e068"} + content:"\e068"} .glyphicon-step-backward:before { - content:"\\e069"} + content:"\e069"} .glyphicon-fast-backward:before { - content:"\\e070"} + content:"\e070"} .glyphicon-backward:before { - content:"\\e071"} + content:"\e071"} .glyphicon-play:before { - content:"\\e072"} + content:"\e072"} .glyphicon-pause:before { - content:"\\e073"} + content:"\e073"} .glyphicon-stop:before { - content:"\\e074"} + content:"\e074"} .glyphicon-forward:before { - content:"\\e075"} + content:"\e075"} .glyphicon-fast-forward:before { - content:"\\e076"} + content:"\e076"} .glyphicon-step-forward:before { - content:"\\e077"} + content:"\e077"} .glyphicon-eject:before { - content:"\\e078"} + content:"\e078"} .glyphicon-chevron-left:before { - content:"\\e079"} + content:"\e079"} .glyphicon-chevron-right:before { - content:"\\e080"} + content:"\e080"} .glyphicon-plus-sign:before { - content:"\\e081"} + content:"\e081"} .glyphicon-minus-sign:before { - content:"\\e082"} + content:"\e082"} .glyphicon-remove-sign:before { - content:"\\e083"} + content:"\e083"} .glyphicon-ok-sign:before { - content:"\\e084"} + content:"\e084"} .glyphicon-question-sign:before { - content:"\\e085"} + content:"\e085"} .glyphicon-info-sign:before { - content:"\\e086"} + content:"\e086"} .glyphicon-screenshot:before { - content:"\\e087"} + content:"\e087"} .glyphicon-remove-circle:before { - content:"\\e088"} + content:"\e088"} .glyphicon-ok-circle:before { - content:"\\e089"} + content:"\e089"} .glyphicon-ban-circle:before { - content:"\\e090"} + content:"\e090"} .glyphicon-arrow-left:before { - content:"\\e091"} + content:"\e091"} .glyphicon-arrow-right:before { - content:"\\e092"} + content:"\e092"} .glyphicon-arrow-up:before { - content:"\\e093"} + content:"\e093"} .glyphicon-arrow-down:before { - content:"\\e094"} + content:"\e094"} .glyphicon-share-alt:before { - content:"\\e095"} + content:"\e095"} .glyphicon-resize-full:before { - content:"\\e096"} + content:"\e096"} .glyphicon-resize-small:before { - content:"\\e097"} + content:"\e097"} .glyphicon-exclamation-sign:before { - content:"\\e101"} + content:"\e101"} .glyphicon-gift:before { - content:"\\e102"} + content:"\e102"} .glyphicon-leaf:before { - content:"\\e103"} + content:"\e103"} .glyphicon-eye-open:before { - content:"\\e105"} + content:"\e105"} .glyphicon-eye-close:before { - content:"\\e106"} + content:"\e106"} .glyphicon-warning-sign:before { - content:"\\e107"} + content:"\e107"} .glyphicon-plane:before { - content:"\\e108"} + content:"\e108"} .glyphicon-random:before { - content:"\\e110"} + content:"\e110"} .glyphicon-comment:before { - content:"\\e111"} + content:"\e111"} .glyphicon-magnet:before { - content:"\\e112"} + content:"\e112"} .glyphicon-chevron-up:before { - content:"\\e113"} + content:"\e113"} .glyphicon-chevron-down:before { - content:"\\e114"} + content:"\e114"} .glyphicon-retweet:before { - content:"\\e115"} + content:"\e115"} .glyphicon-shopping-cart:before { - content:"\\e116"} + content:"\e116"} .glyphicon-folder-close:before { - content:"\\e117"} + content:"\e117"} .glyphicon-folder-open:before { - content:"\\e118"} + content:"\e118"} .glyphicon-resize-vertical:before { - content:"\\e119"} + content:"\e119"} .glyphicon-resize-horizontal:before { - content:"\\e120"} + content:"\e120"} .glyphicon-hdd:before { - content:"\\e121"} + content:"\e121"} .glyphicon-bullhorn:before { - content:"\\e122"} + content:"\e122"} .glyphicon-certificate:before { - content:"\\e124"} + content:"\e124"} .glyphicon-thumbs-up:before { - content:"\\e125"} + content:"\e125"} .glyphicon-thumbs-down:before { - content:"\\e126"} + content:"\e126"} .glyphicon-hand-right:before { - content:"\\e127"} + content:"\e127"} .glyphicon-hand-left:before { - content:"\\e128"} + content:"\e128"} .glyphicon-hand-up:before { - content:"\\e129"} + content:"\e129"} .glyphicon-hand-down:before { - content:"\\e130"} + content:"\e130"} .glyphicon-circle-arrow-right:before { - content:"\\e131"} + content:"\e131"} .glyphicon-circle-arrow-left:before { - content:"\\e132"} + content:"\e132"} .glyphicon-circle-arrow-up:before { - content:"\\e133"} + content:"\e133"} .glyphicon-circle-arrow-down:before { - content:"\\e134"} + content:"\e134"} .glyphicon-globe:before { - content:"\\e135"} + content:"\e135"} .glyphicon-tasks:before { - content:"\\e137"} + content:"\e137"} .glyphicon-filter:before { - content:"\\e138"} + content:"\e138"} .glyphicon-fullscreen:before { - content:"\\e140"} + content:"\e140"} .glyphicon-dashboard:before { - content:"\\e141"} + content:"\e141"} .glyphicon-heart-empty:before { - content:"\\e143"} + content:"\e143"} .glyphicon-link:before { - content:"\\e144"} + content:"\e144"} .glyphicon-phone:before { - content:"\\e145"} + content:"\e145"} .glyphicon-usd:before { - content:"\\e148"} + content:"\e148"} .glyphicon-gbp:before { - content:"\\e149"} + content:"\e149"} .glyphicon-sort:before { - content:"\\e150"} + content:"\e150"} .glyphicon-sort-by-alphabet:before { - content:"\\e151"} + content:"\e151"} .glyphicon-sort-by-alphabet-alt:before { - content:"\\e152"} + content:"\e152"} .glyphicon-sort-by-order:before { - content:"\\e153"} + content:"\e153"} .glyphicon-sort-by-order-alt:before { - content:"\\e154"} + content:"\e154"} .glyphicon-sort-by-attributes:before { - content:"\\e155"} + content:"\e155"} .glyphicon-sort-by-attributes-alt:before { - content:"\\e156"} + content:"\e156"} .glyphicon-unchecked:before { - content:"\\e157"} + content:"\e157"} .glyphicon-expand:before { - content:"\\e158"} + content:"\e158"} .glyphicon-collapse-down:before { - content:"\\e159"} + content:"\e159"} .glyphicon-collapse-up:before { - content:"\\e160"} + content:"\e160"} .glyphicon-log-in:before { - content:"\\e161"} + content:"\e161"} .glyphicon-flash:before { - content:"\\e162"} + content:"\e162"} .glyphicon-log-out:before { - content:"\\e163"} + content:"\e163"} .glyphicon-new-window:before { - content:"\\e164"} + content:"\e164"} .glyphicon-record:before { - content:"\\e165"} + content:"\e165"} .glyphicon-save:before { - content:"\\e166"} + content:"\e166"} .glyphicon-open:before { - content:"\\e167"} + content:"\e167"} .glyphicon-saved:before { - content:"\\e168"} + content:"\e168"} .glyphicon-import:before { - content:"\\e169"} + content:"\e169"} .glyphicon-export:before { - content:"\\e170"} + content:"\e170"} .glyphicon-send:before { - content:"\\e171"} + content:"\e171"} .glyphicon-floppy-disk:before { - content:"\\e172"} + content:"\e172"} .glyphicon-floppy-saved:before { - content:"\\e173"} + content:"\e173"} .glyphicon-floppy-remove:before { - content:"\\e174"} + content:"\e174"} .glyphicon-floppy-save:before { - content:"\\e175"} + content:"\e175"} .glyphicon-floppy-open:before { - content:"\\e176"} + content:"\e176"} .glyphicon-credit-card:before { - content:"\\e177"} + content:"\e177"} .glyphicon-transfer:before { - content:"\\e178"} + content:"\e178"} .glyphicon-cutlery:before { - content:"\\e179"} + content:"\e179"} .glyphicon-header:before { - content:"\\e180"} + content:"\e180"} .glyphicon-compressed:before { - content:"\\e181"} + content:"\e181"} .glyphicon-earphone:before { - content:"\\e182"} + content:"\e182"} .glyphicon-phone-alt:before { - content:"\\e183"} + content:"\e183"} .glyphicon-tower:before { - content:"\\e184"} + content:"\e184"} .glyphicon-stats:before { - content:"\\e185"} + content:"\e185"} .glyphicon-sd-video:before { - content:"\\e186"} + content:"\e186"} .glyphicon-hd-video:before { - content:"\\e187"} + content:"\e187"} .glyphicon-subtitles:before { - content:"\\e188"} + content:"\e188"} .glyphicon-sound-stereo:before { - content:"\\e189"} + content:"\e189"} .glyphicon-sound-dolby:before { - content:"\\e190"} + content:"\e190"} .glyphicon-sound-5-1:before { - content:"\\e191"} + content:"\e191"} .glyphicon-sound-6-1:before { - content:"\\e192"} + content:"\e192"} .glyphicon-sound-7-1:before { - content:"\\e193"} + content:"\e193"} .glyphicon-copyright-mark:before { - content:"\\e194"} + content:"\e194"} .glyphicon-registration-mark:before { - content:"\\e195"} + content:"\e195"} .glyphicon-cloud-download:before { - content:"\\e197"} + content:"\e197"} .glyphicon-cloud-upload:before { - content:"\\e198"} + content:"\e198"} .glyphicon-tree-conifer:before { - content:"\\e199"} + content:"\e199"} .glyphicon-tree-deciduous:before { - content:"\\e200"} + content:"\e200"} .glyphicon-briefcase:before { - content:"\\1f4bc"} + content:"\1f4bc"} .glyphicon-calendar:before { - content:"\\1f4c5"} + content:"\1f4c5"} .glyphicon-pushpin:before { - content:"\\1f4cc"} + content:"\1f4cc"} .glyphicon-paperclip:before { - content:"\\1f4ce"} + content:"\1f4ce"} .glyphicon-camera:before { - content:"\\1f4f7"} + content:"\1f4f7"} .glyphicon-lock:before { - content:"\\1f512"} + content:"\1f512"} .glyphicon-bell:before { - content:"\\1f514"} + content:"\1f514"} .glyphicon-bookmark:before { - content:"\\1f516"} + content:"\1f516"} .glyphicon-fire:before { - content:"\\1f525"} + content:"\1f525"} .glyphicon-wrench:before { - content:"\\1f527"} + content:"\1f527"} .caret { display:inline-block; width:0; @@ -2442,7 +2442,7 @@ textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon .breadcrumb>li+li:before { padding:0 5px; color:#ccc; - content:"/\\00a0"} + content:"/\00a0"} .breadcrumb>.active { color:#999} .pagination { @@ -3375,9 +3375,9 @@ body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom { margin-left:-10px; font-family:serif} .carousel-control .icon-prev:before { - content:'\\2039'} + content:'\2039'} .carousel-control .icon-next:before { - content:'\\203a'} + content:'\203a'} .carousel-indicators { position:absolute; bottom:10px; diff --git a/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.eot b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 00000000000..87eaa434234 Binary files /dev/null and b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.eot differ diff --git a/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.svg b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 00000000000..5fee0685496 --- /dev/null +++ b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 00000000000..be784dc1d5b Binary files /dev/null and b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf differ diff --git a/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.woff b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 00000000000..2cc3e4852a5 Binary files /dev/null and b/addons/website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.woff differ diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css index 31167984b83..64f58c8db11 100644 --- a/addons/website/static/src/css/editor.css +++ b/addons/website/static/src/css/editor.css @@ -1,3 +1,4 @@ +@charset "UTF-8"; /* ---- CKEditor Minimal Reset ---- */ .navbar.navbar-inverse .cke_chrome { border: none; @@ -7,6 +8,19 @@ background: transparent; } +.navbar.navbar-inverse .cke_toolbar { + position: relative; + top: 1px; +} +.navbar.navbar-inverse .cke_combo_button { + padding-top: 3px; + padding-bottom: 3px; +} +.navbar.navbar-inverse .cke_button { + padding-top: 7px; + padding-bottom: 7px; +} + .navbar.navbar-inverse .cke_top { background: transparent; border: none; @@ -86,6 +100,9 @@ table.editorbar-panel { cursor: pointer; width: 100%; } +table.editorbar-panel td { + border: 1px solid #aaaaaa; +} table.editorbar-panel td.selected { background-color: #b1c9d9; } @@ -99,6 +116,18 @@ table.editorbar-panel td.selected { user-select: auto; } +.modal-dialog.select-image { + width: 80%; +} + +.modal .existing-attachments .pager { + margin: 0; +} + +.modal .image-preview { + margin-bottom: 0.5em; +} + .cke_widget_drag_handler_container { display: none !important; } @@ -108,192 +137,232 @@ table.editorbar-panel td.selected { position: fixed; left: 0px; right: 0px; - bottom: 0px; - max-height: 280px; - min-height: 140px; + top: 50px; background: #282828; box-shadow: 0px 10px 10px -10px black inset; + z-index: 1010; + overflow: hidden; + height: 110px; +} +#oe_snippets:hover { + height: auto; +} +#oe_snippets .scroll { + white-space: nowrap; overflow-y: auto; - z-index: 20000; } -#oe_snippets .nav-pills { - padding: 3px 8px; +#oe_snippets .nav { + padding: 3px 15px; + width: 162px; background: #444444; + position: fixed; + z-index: 1; + height: 108px; } -#oe_snippets .nav-pills > li > a { +#oe_snippets .nav > li { + display: block; + float: none; +} +#oe_snippets .nav > li > a { padding: 2px 10px !important; + width: 100%; + display: block; } #oe_snippets .pill-content { - height: 140px; + display: inline-block; + height: 110px; + white-space: nowrap; + padding-left: 166px; +} +#oe_snippets .pill-content > div { + display: inline-block; +} +#oe_snippets .pill-content > div label { + width: 44px; + height: 100%; + color: white; + padding-left: 10px; +} +#oe_snippets .pill-content > div label div { + width: 100px; + text-align: center; + -webkit-transform: translate(-39px, 44px) rotate(-90deg); + -moz-transform: translate(-39px, 44px) rotate(-90deg); + -o-transform: translate(-39px, 44px) rotate(-90deg); + transform: translate(-39px, 44px) rotate(-90deg); + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + transform-origin: 50% 50%; } .oe_snippet { display: inline-block; vertical-align: top; - background: white; - width: 120px; - height: 120px; + width: 108px; + height: 108px; border-radius: 3px; - margin: 10px; - margin-right: 0px; + margin: 1px; + margin-top: 0px; position: relative; - box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.2); overflow: hidden; -webkit-user-select: none; user-select: none; cursor: move; -} -.oe_snippet .oe_snippet_thumbnail.oe_label { - text-align: center; - background: #747474; - background-image: radial-gradient(rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.4)); - height: 100%; - line-height: 120px; - color: white; - text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.95); - box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset; -} -.oe_snippet .oe_snippet_body { - display: none; -} -.oe_snippet > * { pointer-events: none; } -.oe_snippet > :not(.oe_snippet_body):not(.oe_snippet_thumbnail) { +.oe_snippet .oe_snippet_thumbnail { + pointer-events: auto; + text-align: center; + height: 100%; + background: transparent; + color: white; + text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.95); + position: relative; +} +.oe_snippet .oe_snippet_thumbnail span, .oe_snippet .oe_snippet_thumbnail div { + line-height: 18px; +} +.oe_snippet > :not(.oe_snippet_thumbnail) { display: none !important; } -.oe_snippet > *:first-child:not(.oe_snippet_thumbnail) { - display: block; - -webkit-transform-origin-x: 5px; - -webkit-transform-origin-y: 10px; - -webkit-transform: scale(0.095); + +#oe_snippets .oe_snippet_thumbnail { + background: #747474; + background-image: radial-gradient(rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.4)); + box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset; } /* ---- SNIPPETS DROP ZONES ---- */ +.col-md-12 { + float: left; +} + .oe_drop_zone.oe_insert { display: block; - height: 32px; - margin: -16px 0px; + height: 48px; + margin: 0px; + margin-bottom: -48px; -webkit-transition: margin 250ms linear; width: 100%; - z-index: 1000; position: absolute; - background: rgba(153, 0, 255, 0.17); - border-radius: 3px; + z-index: 1000; } -.oe_drop_zone.oe_insert:first-child:not(:last-child) { - margin-top: -8px; - margin-bottom: -24px; -} -.oe_drop_zone.oe_insert:last-child:not(:first-child) { - margin-top: -24px; - margin-bottom: -8px; -} -.oe_drop_zone.oe_insert:before { +.oe_drop_zone.oe_insert:not(.oe_vertical):before { content: ""; display: block; border-top: dashed 2px rgba(209, 178, 255, 0.72); position: relative; - top: 16px; -} -.oe_drop_zone.oe_insert:first-child:not(:last-child):before { - top: 8px; -} -.oe_drop_zone.oe_insert:last-child:not(:first-child):before { - top: 24px; + top: 0px; } .oe_drop_zone.oe_insert.oe_hover:before { border-top: dashed 2px rgba(116, 255, 161, 0.72); } .oe_drop_zone.oe_insert.oe_vertical { - width: 16px; - display: inline-block; - position: absolute; - margin: 0px !important; + width: 48px; + float: left; + position: relative; + margin: 0px -24px !important; } - -.oe_drop_zone { +.oe_drop_zone.oe_insert.oe_overlay { background: rgba(153, 0, 255, 0.17); border-radius: 3px; } -.oe_drop_zone.oe_hover { + +.oe_drop_zone, .oe_drop_zone_style { + background: rgba(153, 0, 255, 0.17); + border-radius: 3px; +} +.oe_drop_zone.oe_hover, .oe_drop_zone_style.oe_hover { background: rgba(0, 255, 133, 0.22); z-index: 1001; } +.oe_drop_zone_style { + color: white; + height: 48px; + margin-bottom: 32px; +} + /* ---- SNIPPET MANIPULATOR ---- */ .oe_overlay { - display: block; + display: none; position: absolute; background: transparent; border-radius: 3px; - opacity: 0; transition: opacity 100ms linear; box-sizing: border-box; pointer-events: none; } -.oe_overlay.oe_hover { - opacity: 1; - cursor: pointer; -} -.oe_overlay.oe_selected, .oe_overlay.oe_active { - opacity: 1; - background: transparent; +.oe_overlay.oe_active { + display: block; border-style: dashed; border-width: 1px; box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.3), 0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset; -} -.oe_overlay.oe_selected { - border-color: rgba(0, 153, 255, 0.5); -} -.oe_overlay .oe_handle { - display: none !important; -} -.oe_overlay.oe_active { border-color: rgba(153, 0, 255, 0.5); } .oe_overlay.oe_active .oe_handle { display: block !important; pointer-events: auto; } +.oe_overlay.oe_active .oe_handle:before { + position: relative; + top: 50%; + left: 50%; + display: block; + background: white; + border: solid 1px #9900ff; + border-radius: 8px; + width: 16px; + height: 16px; + margin: -8px; + padding-left: 1px; + font-size: 14px; + line-height: 14px; + color: #9900ff; + -webkit-transition: background 100ms linear; +} +.oe_overlay.oe_active .oe_handle:hover:before { + background: #9900ff; + color: white; +} +.oe_overlay.oe_active .oe_handle.e:before { + content: "⇨"; +} +.oe_overlay.oe_active .oe_handle.s:before { + content: "⇩"; +} +.oe_overlay.oe_active .oe_handle.w:before { + content: "⇦"; +} +.oe_overlay.oe_active .oe_handle.n:before { + content: "⇧"; +} .oe_overlay .icon.btn { display: inline-block; } .oe_overlay .oe_overlay_options { - display: none; - z-index: 1002; -} -.oe_overlay .oe_overlay_options .oe_options, .oe_overlay .oe_overlay_options .oe_label, .oe_overlay .oe_overlay_options .oe_move { position: absolute; - display: block; - z-index: 1002; + width: 100%; + text-align: center; top: -11px; + z-index: 1002; } -.oe_overlay .oe_overlay_options .oe_options { +.oe_overlay .oe_overlay_options .btn, .oe_overlay .oe_overlay_options a { pointer-events: auto; - left: -14px; + cursor: pointer; } -.oe_overlay .oe_overlay_options .oe_label { - top: -8px; - right: 6px; - background: white; - font-size: 75%; - color: rgba(153, 0, 255, 0.5); - padding: 0 5px; +.oe_overlay .oe_overlay_options .dropdown { + display: inline-block; } -.oe_overlay .oe_overlay_options .oe_move { - pointer-events: auto; - left: 50%; -} -.oe_overlay .oe_overlay_options .oe_move .js_box_move { - margin-left: -50%; +.oe_overlay .oe_overlay_options .dropdown-menu { + text-align: left; + min-width: 180px; } .oe_overlay .oe_overlay_options .dropdown-menu select, .oe_overlay .oe_overlay_options .dropdown-menu input { display: block; } -.oe_overlay.oe_active .oe_overlay_options { - display: block; -} .oe_handle { pointer-events: auto; @@ -414,10 +483,30 @@ table.editorbar-panel td.selected { .oe_seo_configuration .oe_seo_suggestion { cursor: pointer; } +.oe_seo_configuration .oe_seo_keyword { + padding: 0.2em 0.4em 0.2em 0.5em; + border-radius: 0.4em; +} +.oe_seo_configuration .keyword-in-title { + background-color: #5cb85c; + color: white; +} +.oe_seo_configuration .keyword-in-description { + background-color: #428bca; + color: white; +} +.oe_seo_configuration .keyword-in-body { + background-color: #5bc0de; + color: white; +} /* ---- ACE EDITOR ---- */ .oe_ace_view_editor { transition: all 0.2s ease-in; + -webkit-transition: all 0.2s ease-in; + -ms-transition: all 0.2s ease-in; + -o-transition: all 0.2s ease-in; + -moz-transition: all 0.2s ease-in; opacity: 0.3; position: fixed; top: 51px; @@ -435,10 +524,16 @@ table.editorbar-panel td.selected { .oe_ace_view_editor .oe_ace_view_editor_title .oe_view_list { width: 50%; height: 32px; + font-size: 14px; + font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace; + line-height: normal; } .oe_ace_view_editor .oe_ace_view_editor_title .btn { height: 32px; padding: 0 4px 0 4px; + font-size: 14px; + font-family: "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "source-code-pro", monospace; + line-height: normal; } .oe_ace_view_editor .ace_editor { position: absolute; diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass index 597804812f1..90b02d3b83a 100644 --- a/addons/website/static/src/css/editor.sass +++ b/addons/website/static/src/css/editor.sass @@ -8,6 +8,17 @@ .navbar.navbar-inverse .cke_inner background: transparent +.navbar.navbar-inverse + .cke_toolbar + position: relative + top: 1px + .cke_combo_button + padding-top: 3px + padding-bottom: 3px + .cke_button + padding-top: 7px + padding-bottom: 7px + .navbar.navbar-inverse .cke_top background: transparent border: none @@ -77,6 +88,8 @@ table.editorbar-panel cursor: pointer width: 100% + td + border: 1px solid #aaa td.selected background-color: #b1c9d9 @@ -91,6 +104,16 @@ table.editorbar-panel -o-user-select: auto user-select: auto +.modal-dialog.select-image + width: 80% + +.modal .existing-attachments + .pager + margin: 0 + +.modal .image-preview + margin-bottom: 0.5em + // "remove" drag & drop of CKE widgets .cke_widget_drag_handler_container display: none !important @@ -101,165 +124,198 @@ table.editorbar-panel position: fixed left: 0px right: 0px - bottom: 0px - max-height: 280px - min-height: 140px + top: 50px background: rgb(40,40,40) box-shadow: 0px 10px 10px -10px black inset - overflow-y: auto - z-index: 20000 - .nav-pills - padding: 3px 8px + z-index: 1010 + overflow: hidden + height: 110px + &:hover + height: auto + .scroll + white-space: nowrap + overflow-y: auto + .nav + padding: 3px 15px + width: 162px background: #444444 - > li > a - padding: 2px 10px !important + > li + display: block + float: none + > a + padding: 2px 10px !important + width: 100% + display: block + position: fixed + z-index: 1 + height: 108px .pill-content - height: 140px + display: inline-block + height: 110px + white-space: nowrap + padding-left: 166px + > div + display: inline-block + label + width: 44px + height: 100% + color: #fff + padding-left: 10px + div + width: 100px + text-align: center + -webkit-transform: translate(-39px, 44px) rotate(-90deg) + -moz-transform: translate(-39px, 44px) rotate(-90deg) + -o-transform: translate(-39px, 44px) rotate(-90deg) + transform: translate(-39px, 44px) rotate(-90deg) + -webkit-transform-origin: 50% 50% + -moz-transform-origin: 50% 50% + -ms-transform-origin: 50% 50% + -o-transform-origin: 50% 50% + transform-origin: 50% 50% .oe_snippet display: inline-block vertical-align: top - background: white - width: 120px - height: 120px + width: 108px + height: 108px border-radius: 3px - margin: 10px - margin-right: 0px + margin: 1px + margin-top: 0px position: relative - box-shadow: 0px 3px 10px rgba(0,0,0,0.2) overflow: hidden -webkit-user-select: none user-select: none cursor: move + pointer-events: none - .oe_snippet_thumbnail.oe_label + .oe_snippet_thumbnail + pointer-events: auto text-align: center - background: rgb(116, 116, 116) - background-image: radial-gradient(rgba(0,0,0,0.25),rgba(0,0,0,0.4)) height: 100% - line-height: 120px + background: transparent color: white text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.95) - box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset - - .oe_snippet_body - display: none - & > * - pointer-events: none - & > :not(.oe_snippet_body):not(.oe_snippet_thumbnail) + position: relative + span, div + line-height: 18px + & > :not(.oe_snippet_thumbnail) display: none !important - & > *:first-child:not(.oe_snippet_thumbnail) - display: block - -webkit-transform-origin-x: 5px - -webkit-transform-origin-y: 10px - -webkit-transform: scale(0.095) - +#oe_snippets .oe_snippet_thumbnail + background: rgb(116, 116, 116) + background-image: radial-gradient(rgba(0,0,0,0.25),rgba(0,0,0,0.4)) + box-shadow: 0px 0px 0px 1px rgba(255, 255, 255, 0.07) inset /* ---- SNIPPETS DROP ZONES ---- */ +.col-md-12 + float: left .oe_drop_zone.oe_insert display: block - height: 32px - margin: -16px 0px + height: 48px + margin: 0px + margin-bottom: -48px -webkit-transition: margin 250ms linear width: 100% + position: absolute z-index: 1000 - &:first-child:not(:last-child) - margin-top: -8px - margin-bottom: -24px - &:last-child:not(:first-child) - margin-top: -24px - margin-bottom: -8px - &:before + &:not(.oe_vertical):before content: "" display: block border-top: dashed 2px rgba(209, 178, 255, 0.72) position: relative - top: 16px - &:first-child:not(:last-child):before - top: 8px - &:last-child:not(:first-child):before - top: 24px + top: 0px &.oe_hover:before border-top: dashed 2px rgba(116, 255, 161, 0.72) &.oe_vertical - width: 16px - display: inline-block - position: absolute - margin: 0px !important + width: 48px + float: left + position: relative + margin: 0px -24px !important &.oe_overlay - position: absolute - background: rgba(153, 0, 255, 0.17) - border-radius: 3px + background: rgba(153, 0, 255, 0.17) + border-radius: 3px -.oe_drop_zone +.oe_drop_zone, .oe_drop_zone_style background: rgba(153, 0, 255, 0.17) border-radius: 3px &.oe_hover background: rgba(0, 255, 133, 0.22) z-index: 1001 +.oe_drop_zone_style + color: white + height: 48px + margin-bottom: 32px + /* ---- SNIPPET MANIPULATOR ---- */ .oe_overlay - display: block + display: none position: absolute - background: transparent //rgba(153, 0, 255, 0.05) + background: transparent border-radius: 3px - opacity: 0 transition: opacity 100ms linear box-sizing: border-box pointer-events: none - &.oe_hover - opacity: 1 - cursor: pointer - &.oe_selected, &.oe_active - opacity: 1 - background: transparent + &.oe_active + display: block border-style: dashed border-width: 1px box-shadow: 0px 0px 0px 1px rgba(255,255,255,0.3), 0px 0px 0px 1px rgba(255,255,255,0.3) inset - &.oe_selected - border-color: rgba(0, 153, 255, 0.5) - .oe_handle - display: none !important - &.oe_active border-color: rgba(153, 0, 255, 0.5) .oe_handle display: block !important pointer-events: auto + &:before + position: relative + top: 50% + left: 50% + display: block + background: rgba(255, 255, 255, 1) + border: solid 1px rgba(153, 0, 255, 1) + border-radius: 8px + width: 16px + height: 16px + margin: -8px + padding-left: 1px + font-size: 14px + line-height: 14px + color: rgba(153, 0, 255, 1) + -webkit-transition: background 100ms linear + &:hover:before + background: rgba(153, 0, 255, 1) + color: #fff + .oe_handle.e:before + content: "⇨" + .oe_handle.s:before + content: "⇩" + .oe_handle.w:before + content: "⇦" + .oe_handle.n:before + content: "⇧" + .icon.btn display: inline-block .oe_overlay_options - display: none + position: absolute + width: 100% + text-align: center + top: -11px z-index: 1002 - .oe_options,.oe_label,.oe_move - position: absolute - display: block - z-index: 1002 - top: -11px - .oe_options + .btn, a pointer-events: auto - left: -14px - .oe_label - top: -8px - right: 6px - background: #fff - font-size: 75% - color: rgba(153, 0, 255, 0.5) - padding: 0 5px - .oe_move - pointer-events: auto - left: 50% - .js_box_move - margin-left: -50% + cursor: pointer + .dropdown + display: inline-block + .dropdown-menu + text-align: left + min-width: 180px .dropdown-menu select,.dropdown-menu input display: block - &.oe_active .oe_overlay_options - display: block .oe_handle pointer-events: auto @@ -354,6 +410,10 @@ $icon_close: #E00101 /* ---- SEO TOOLS ---- */ $remove_color: $icon_close +$in_title_color: #5cb85c +$in_description_color: #428bca +$in_body_color: #5bc0de +$highlighted_text_color: #ffffff .oe_seo_configuration .modal-dialog width: 80% @@ -361,6 +421,18 @@ $remove_color: $icon_close color: $remove_color .oe_seo_suggestion cursor: pointer + .oe_seo_keyword + padding: .2em .4em .2em .5em + border-radius: .4em + .keyword-in-title + background-color: $in_title_color + color: $highlighted_text_color + .keyword-in-description + background-color: $in_description_color + color: $highlighted_text_color + .keyword-in-body + background-color: $in_body_color + color: $highlighted_text_color /* ---- ACE EDITOR ---- */ @@ -369,8 +441,16 @@ $editorbar_height: 40px // TODO Fix => might break with themes $navbar_height: 51px +@mixin editor-font + font-size: 14px + font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace + line-height: normal .oe_ace_view_editor transition: all 0.2s ease-in + -webkit-transition: all 0.2s ease-in + -ms-transition: all 0.2s ease-in + -o-transition: all 0.2s ease-in + -moz-transition: all 0.2s ease-in opacity: 0.3 position: fixed top: $navbar_height @@ -386,9 +466,11 @@ $navbar_height: 51px .oe_view_list width: 50% height: $editorbar_height - 8px + @include editor-font .btn height: $editorbar_height - 8px padding: 0 4px 0 4px + @include editor-font .ace_editor position: absolute top: $editorbar_height diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.eot b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 00000000000..87eaa434234 Binary files /dev/null and b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.eot differ diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.svg b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 00000000000..5fee0685496 --- /dev/null +++ b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.ttf b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 00000000000..be784dc1d5b Binary files /dev/null and b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.ttf differ diff --git a/addons/website/static/src/css/fonts/glyphicons-halflings-regular.woff b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 00000000000..2cc3e4852a5 Binary files /dev/null and b/addons/website/static/src/css/fonts/glyphicons-halflings-regular.woff differ diff --git a/addons/website/static/src/css/snippets.css b/addons/website/static/src/css/snippets.css index 5b7d404a1fd..628689b78cf 100644 --- a/addons/website/static/src/css/snippets.css +++ b/addons/website/static/src/css/snippets.css @@ -206,4 +206,16 @@ [data-snippet-id] { min-height: 10px; min-width: 10px; -} \ No newline at end of file +} + + +/* Custom CSS for snippets */ +.carousel.oe_small .carousel-inner { + height: 200px; +} +.carousel.oe_medium .carousel-inner { + height: 300px; +} +.carousel.oe_big .carousel-inner { + height: 450px; +} diff --git a/addons/website/static/src/css/website.css b/addons/website/static/src/css/website.css index 75de4387083..c48d4fa9b2a 100644 --- a/addons/website/static/src/css/website.css +++ b/addons/website/static/src/css/website.css @@ -78,6 +78,78 @@ margin-bottom: 0px !important; } +.pt128 { + padding-top: 128px !important; +} + +.pt92 { + padding-top: 92px !important; +} + +.pt64 { + padding-top: 64px !important; +} + +.pt48 { + padding-top: 48px !important; +} + +.pt32 { + padding-top: 32px !important; +} + +.pt16 { + padding-top: 16px !important; +} + +.pt8 { + padding-top: 8px !important; +} + +.pt4 { + padding-top: 4px !important; +} + +.pt0 { + padding-top: 0px !important; +} + +.pb128 { + padding-bottom: 128px !important; +} + +.pb92 { + padding-bottom: 92px !important; +} + +.pb64 { + padding-bottom: 64px !important; +} + +.pb48 { + padding-bottom: 48px !important; +} + +.pb32 { + padding-bottom: 32px !important; +} + +.pb16 { + padding-bottom: 16px !important; +} + +.pb8 { + padding-bottom: 8px !important; +} + +.pb4 { + padding-bottom: 4px !important; +} + +.pb0 { + padding-bottom: 0px !important; +} + /* Grid of unequally tall elements */ .grid > [class*="col-md"] { display: inline-block; @@ -95,6 +167,28 @@ vertical-align: bottom; } +/* Extra Styles */ +img.shadow { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2); + margin: 0 auto; +} + +h1.text-muted, h2.text-muted, h3.text-muted { + margin-top: 10px; +} + +/* ----- BOOTSTRAP HACK FOR HEADER NAV BAR ----- */ +.navbar.navbar-default.navbar-static-top { + margin-bottom: 0; +} + /* ----- BOOTSTRAP HACK FOR STICKY FOOTER ----- */ html, body, #wrapwrap { box-sizing: border-box; @@ -121,19 +215,87 @@ footer { padding-bottom: 12px; } +/* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ +.oe_structure.oe_empty:empty, [data-oe-type=html]:empty, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child { + background-image: url("/website/static/src/img/drag_here.png"); + background-repeat: no-repeat; + background-position: center top; + height: 200px !important; +} + +.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child { + position: static; +} + +.oe_structure.oe_empty:empty:before, [data-oe-type=html]:empty:before, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child:before, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child:before { + content: "Drag Building Blocks Here"; + text-align: center; + display: block; + padding-top: 100px; + padding-bottom: 50px; + color: grey; + font-size: 24px; +} + /* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ .navbar .nav > li > p { margin-bottom: 0px; } -.carousel .item { - color: white; +.carousel-inner .item { + height: 100%; +} + +.carousel .carousel-caption h1, .carousel .carousel-caption h2, .carousel .carousel-caption h3 { + margin-top: 10px; + margin-bottom: 10px; +} +.carousel .carousel-image { + right: 10%; + left: 50%; + top: 5%; + bottom: 5%; + position: absolute; + text-align: center; +} +.carousel .carousel-image img { + height: 100%; + margin: 0 auto; +} +.carousel .item.text_image .carousel-caption { + left: auto; + right: auto; + bottom: 10%; + text-align: left; + padding: 20px; + background: rgba(0, 0, 0, 0.4); +} +.carousel .item.text_only .carousel-image { + display: none; +} +.carousel .item.text_only .carousel-caption { + left: 10%; + right: 10%; + top: 10%; + text-align: center; +} +.carousel .item.image_text .carousel-caption { + left: auto; + text-align: left; + right: 10%; + bottom: 10%; + padding: 20px; + background: rgba(0, 0, 0, 0.4); +} +.carousel .item.image_text .carousel-image { + right: 50%; + left: 10%; } /* ---- HOMEPAGE THEME CUSTOMIZATION ---- */ .dark { background: #eff8f8; - background: rgba(100, 200, 200, 0.1); + background: rgba(100, 200, 200, 0.14); -webkit-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset; -moz-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset; box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset; @@ -143,8 +305,8 @@ footer { padding-left: 16px; } -div#wrap .carousel { - top: -20px; +#themes-list .well { + padding: 0 0 20px 0; } /* -- Hack for removing double scrollbar from mobile preview -- */ diff --git a/addons/website/static/src/css/website.sass b/addons/website/static/src/css/website.sass index 86cfad27fc6..9f7efa2c416 100644 --- a/addons/website/static/src/css/website.sass +++ b/addons/website/static/src/css/website.sass @@ -49,6 +49,44 @@ .mb0 margin-bottom: 0px !important +.pt128 + padding-top: 128px !important +.pt92 + padding-top: 92px !important +.pt64 + padding-top: 64px !important +.pt48 + padding-top: 48px !important +.pt32 + padding-top: 32px !important +.pt16 + padding-top: 16px !important +.pt8 + padding-top: 8px !important +.pt4 + padding-top: 4px !important +.pt0 + padding-top: 0px !important + +.pb128 + padding-bottom: 128px !important +.pb92 + padding-bottom: 92px !important +.pb64 + padding-bottom: 64px !important +.pb48 + padding-bottom: 48px !important +.pb32 + padding-bottom: 32px !important +.pb16 + padding-bottom: 16px !important +.pb8 + padding-bottom: 8px !important +.pb4 + padding-bottom: 4px !important +.pb0 + padding-bottom: 0px !important + /* Grid of unequally tall elements */ .grid > [class*="col-md"] display: inline-block @@ -62,6 +100,27 @@ &.grid-align-bottom > [class*="col-md"] vertical-align: bottom +/* Extra Styles */ + +img.shadow + -webkit-border-radius: 3px + -moz-border-radius: 3px + -ms-border-radius: 3px + -o-border-radius: 3px + border-radius: 3px + -webkit-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2) + -moz-box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2) + box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2) + margin: 0 auto + +h1.text-muted, h2.text-muted, h3.text-muted + margin-top: 10px + +/* ----- BOOTSTRAP HACK FOR HEADER NAV BAR ----- */ + +.navbar.navbar-default.navbar-static-top + margin-bottom: 0 + /* ----- BOOTSTRAP HACK FOR STICKY FOOTER ----- */ html,body, #wrapwrap @@ -86,6 +145,26 @@ footer /* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ +.oe_structure.oe_empty:empty, [data-oe-type=html]:empty, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child + background-image: url('/website/static/src/img/drag_here.png') + background-repeat: no-repeat + background-position: center top + height: 200px !important + +.oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child + position: static + +.oe_structure.oe_empty:empty:before, [data-oe-type=html]:empty:before, .oe_structure.oe_empty > .oe_drop_zone.oe_insert:only-child:before, [data-oe-type=html] > .oe_drop_zone.oe_insert:only-child:before + content: 'Drag Building Blocks Here' + text-align: center + display: block + padding-top: 100px + padding-bottom: 50px + color: grey + font-size: 24px + +/* ---- HACK FOR COVERING UP CK EDITOR BOGUS P INSERTION --- */ + .navbar .nav > li > p margin-bottom: 0px @@ -95,14 +174,57 @@ footer // .nav > li a // display: block -.carousel .item - color: white +.carousel-inner .item + height: 100% + +.carousel + .carousel-caption + h1, h2, h3 + margin-top: 10px + margin-bottom: 10px + .carousel-image + right: 10% + left: 50% + top: 5% + bottom: 5% + position: absolute + text-align: center + img + height: 100% + margin: 0 auto + .item.text_image + .carousel-caption + left: auto + right: auto + bottom: 10% + text-align: left + padding: 20px + background: rgba(0, 0, 0, 0.4) + .item.text_only + .carousel-image + display: none + .carousel-caption + left: 10% + right: 10% + top: 10% + text-align: center + .item.image_text + .carousel-caption + left: auto + text-align: left + right: 10% + bottom: 10% + padding: 20px + background: rgba(0, 0, 0, 0.4) + .carousel-image + right: 50% + left: 10% /* ---- HOMEPAGE THEME CUSTOMIZATION ---- */ .dark background: #eff8f8 - background: rgba(100, 200, 200, 0.1) + background: rgba(100, 200, 200, 0.14) -webkit-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset -moz-box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset box-shadow: 0px 5px 9px -7px rgba(0, 0, 255, 0.5) inset, 0px -3px 9px -7px rgba(0, 0, 255, 0.5) inset @@ -110,8 +232,8 @@ footer .nav-hierarchy padding-left: 16px -div#wrap .carousel - top: -20px +#themes-list .well + padding: 0 0 20px 0 /* -- Hack for removing double scrollbar from mobile preview -- */ div#mobile-preview.modal diff --git a/addons/website/static/src/img/banner/aqua.jpg b/addons/website/static/src/img/banner/aqua.jpg new file mode 100644 index 00000000000..47ce77005d4 Binary files /dev/null and b/addons/website/static/src/img/banner/aqua.jpg differ diff --git a/addons/website/static/src/img/banner/baby_blue.jpg b/addons/website/static/src/img/banner/baby_blue.jpg new file mode 100644 index 00000000000..38a3d85bc28 Binary files /dev/null and b/addons/website/static/src/img/banner/baby_blue.jpg differ diff --git a/addons/website/static/src/img/banner/banner_picture.png b/addons/website/static/src/img/banner/banner_picture.png new file mode 100644 index 00000000000..47836637498 Binary files /dev/null and b/addons/website/static/src/img/banner/banner_picture.png differ diff --git a/addons/website/static/src/img/banner/black.jpg b/addons/website/static/src/img/banner/black.jpg new file mode 100644 index 00000000000..7aaee7a0fb4 Binary files /dev/null and b/addons/website/static/src/img/banner/black.jpg differ diff --git a/addons/website/static/src/img/banner/business_guy.jpg b/addons/website/static/src/img/banner/business_guy.jpg new file mode 100644 index 00000000000..691729beb7e Binary files /dev/null and b/addons/website/static/src/img/banner/business_guy.jpg differ diff --git a/addons/website/static/src/img/banner/color_splash.jpg b/addons/website/static/src/img/banner/color_splash.jpg new file mode 100644 index 00000000000..e17ae39e70f Binary files /dev/null and b/addons/website/static/src/img/banner/color_splash.jpg differ diff --git a/addons/website/static/src/img/banner/flower.jpg b/addons/website/static/src/img/banner/flower.jpg new file mode 100644 index 00000000000..7208e4c99d9 Binary files /dev/null and b/addons/website/static/src/img/banner/flower.jpg differ diff --git a/addons/website/static/src/img/banner/flower_field.jpg b/addons/website/static/src/img/banner/flower_field.jpg new file mode 100644 index 00000000000..eec572fbb89 Binary files /dev/null and b/addons/website/static/src/img/banner/flower_field.jpg differ diff --git a/addons/website/static/src/img/greenfields.jpg b/addons/website/static/src/img/banner/greenfields.jpg similarity index 100% rename from addons/website/static/src/img/greenfields.jpg rename to addons/website/static/src/img/banner/greenfields.jpg diff --git a/addons/website/static/src/img/banner/landscape.jpg b/addons/website/static/src/img/banner/landscape.jpg new file mode 100644 index 00000000000..35dfa6206c4 Binary files /dev/null and b/addons/website/static/src/img/banner/landscape.jpg differ diff --git a/addons/website/static/src/img/landscape.png b/addons/website/static/src/img/banner/landscape.png similarity index 100% rename from addons/website/static/src/img/landscape.png rename to addons/website/static/src/img/banner/landscape.png diff --git a/addons/website/static/src/img/banner/mango.jpg b/addons/website/static/src/img/banner/mango.jpg new file mode 100644 index 00000000000..9f88e2fb987 Binary files /dev/null and b/addons/website/static/src/img/banner/mango.jpg differ diff --git a/addons/website/static/src/img/banner/mountains.jpg b/addons/website/static/src/img/banner/mountains.jpg new file mode 100644 index 00000000000..47e53c82c8c Binary files /dev/null and b/addons/website/static/src/img/banner/mountains.jpg differ diff --git a/addons/website/static/src/img/banner/orange_red.jpg b/addons/website/static/src/img/banner/orange_red.jpg new file mode 100644 index 00000000000..18838410c9f Binary files /dev/null and b/addons/website/static/src/img/banner/orange_red.jpg differ diff --git a/addons/website/static/src/img/banner/velour.jpg b/addons/website/static/src/img/banner/velour.jpg new file mode 100644 index 00000000000..f3b0cf1d528 Binary files /dev/null and b/addons/website/static/src/img/banner/velour.jpg differ diff --git a/addons/website/static/src/img/banner/wood.jpg b/addons/website/static/src/img/banner/wood.jpg new file mode 100644 index 00000000000..738ff955918 Binary files /dev/null and b/addons/website/static/src/img/banner/wood.jpg differ diff --git a/addons/website/static/src/img/banner/yellow_green.jpg b/addons/website/static/src/img/banner/yellow_green.jpg new file mode 100644 index 00000000000..efd4dad9278 Binary files /dev/null and b/addons/website/static/src/img/banner/yellow_green.jpg differ diff --git a/addons/website/static/src/img/big_picture.png b/addons/website/static/src/img/big_picture.png new file mode 100644 index 00000000000..cecb39679d5 Binary files /dev/null and b/addons/website/static/src/img/big_picture.png differ diff --git a/addons/website/static/src/img/drag_here.png b/addons/website/static/src/img/drag_here.png new file mode 100644 index 00000000000..f2e3d38b2df Binary files /dev/null and b/addons/website/static/src/img/drag_here.png differ diff --git a/addons/website/static/src/img/image_text.jpg b/addons/website/static/src/img/image_text.jpg new file mode 100644 index 00000000000..f34acfc771b Binary files /dev/null and b/addons/website/static/src/img/image_text.jpg differ diff --git a/addons/website/static/src/img/landscape.jpg b/addons/website/static/src/img/landscape.jpg new file mode 100644 index 00000000000..8c4d19c947e Binary files /dev/null and b/addons/website/static/src/img/landscape.jpg differ diff --git a/addons/website/static/src/img/library/baby.jpg b/addons/website/static/src/img/library/baby.jpg new file mode 100644 index 00000000000..2e1b0cb877a Binary files /dev/null and b/addons/website/static/src/img/library/baby.jpg differ diff --git a/addons/website/static/src/img/library/business_conference.jpg b/addons/website/static/src/img/library/business_conference.jpg new file mode 100644 index 00000000000..407137d159a Binary files /dev/null and b/addons/website/static/src/img/library/business_conference.jpg differ diff --git a/addons/website/static/src/img/library/business_hands.jpg b/addons/website/static/src/img/library/business_hands.jpg new file mode 100644 index 00000000000..cb012519301 Binary files /dev/null and b/addons/website/static/src/img/library/business_hands.jpg differ diff --git a/addons/website/static/src/img/library/business_stats.jpg b/addons/website/static/src/img/library/business_stats.jpg new file mode 100644 index 00000000000..1123100c675 Binary files /dev/null and b/addons/website/static/src/img/library/business_stats.jpg differ diff --git a/addons/website/static/src/img/library/engineer.jpg b/addons/website/static/src/img/library/engineer.jpg new file mode 100644 index 00000000000..bd0fa56c38f Binary files /dev/null and b/addons/website/static/src/img/library/engineer.jpg differ diff --git a/addons/website/static/src/img/library/flight.jpg b/addons/website/static/src/img/library/flight.jpg new file mode 100644 index 00000000000..0071979a015 Binary files /dev/null and b/addons/website/static/src/img/library/flight.jpg differ diff --git a/addons/website/static/src/img/library/gears.jpg b/addons/website/static/src/img/library/gears.jpg new file mode 100644 index 00000000000..868c2532c41 Binary files /dev/null and b/addons/website/static/src/img/library/gears.jpg differ diff --git a/addons/website/static/src/img/library/helpdesk.jpg b/addons/website/static/src/img/library/helpdesk.jpg new file mode 100644 index 00000000000..9591abe164e Binary files /dev/null and b/addons/website/static/src/img/library/helpdesk.jpg differ diff --git a/addons/website/static/src/img/library/landscape_tree.jpg b/addons/website/static/src/img/library/landscape_tree.jpg new file mode 100644 index 00000000000..fd5c9446c7b Binary files /dev/null and b/addons/website/static/src/img/library/landscape_tree.jpg differ diff --git a/addons/website/static/src/img/library/lazagne.jpg b/addons/website/static/src/img/library/lazagne.jpg new file mode 100644 index 00000000000..21f10a01ca7 Binary files /dev/null and b/addons/website/static/src/img/library/lazagne.jpg differ diff --git a/addons/website/static/src/img/library/manufacturing.jpg b/addons/website/static/src/img/library/manufacturing.jpg new file mode 100644 index 00000000000..dc7266e46a8 Binary files /dev/null and b/addons/website/static/src/img/library/manufacturing.jpg differ diff --git a/addons/website/static/src/img/library/personal_laptop.jpg b/addons/website/static/src/img/library/personal_laptop.jpg new file mode 100644 index 00000000000..069487766dd Binary files /dev/null and b/addons/website/static/src/img/library/personal_laptop.jpg differ diff --git a/addons/website/static/src/img/library/school_kids.jpg b/addons/website/static/src/img/library/school_kids.jpg new file mode 100644 index 00000000000..107b56bba97 Binary files /dev/null and b/addons/website/static/src/img/library/school_kids.jpg differ diff --git a/addons/website/static/src/img/library/ship_sea.jpg b/addons/website/static/src/img/library/ship_sea.jpg new file mode 100644 index 00000000000..cd0057dbdd6 Binary files /dev/null and b/addons/website/static/src/img/library/ship_sea.jpg differ diff --git a/addons/website/static/src/img/library/vegetables.jpg b/addons/website/static/src/img/library/vegetables.jpg new file mode 100644 index 00000000000..61a2518bbc4 Binary files /dev/null and b/addons/website/static/src/img/library/vegetables.jpg differ diff --git a/addons/website/static/src/img/library/world.jpg b/addons/website/static/src/img/library/world.jpg new file mode 100644 index 00000000000..b7b36d65360 Binary files /dev/null and b/addons/website/static/src/img/library/world.jpg differ diff --git a/addons/website/static/src/img/openerp_logo.png b/addons/website/static/src/img/openerp_logo.png new file mode 100644 index 00000000000..285a059cb06 Binary files /dev/null and b/addons/website/static/src/img/openerp_logo.png differ diff --git a/addons/website/static/src/img/text_image.png b/addons/website/static/src/img/text_image.png new file mode 100644 index 00000000000..ac02ef230c7 Binary files /dev/null and b/addons/website/static/src/img/text_image.png differ diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js index fd26c50aefd..206813f237b 100644 --- a/addons/website/static/src/js/website.ace.js +++ b/addons/website/static/src/js/website.ace.js @@ -3,20 +3,33 @@ var globalEditor; + var hash = "#advanced-view-editor"; + var website = openerp.website; website.templates.push('/website/static/src/xml/website.ace.xml'); + website.ready().then(function () { + if (window.location.hash.indexOf(hash) >= 0) { + launch(); + } + }); + + function launch () { + if (globalEditor) { + globalEditor.open(); + } else { + globalEditor = new website.ace.ViewEditor(this); + globalEditor.appendTo($(document.body)); + } + } + website.EditorBar.include({ events: _.extend({}, website.EditorBar.prototype.events, { 'click a[data-action=ace]': 'launchAce', }), - launchAce: function () { - if (globalEditor) { - globalEditor.open(); - } else { - globalEditor = new website.ace.ViewEditor(this); - globalEditor.appendTo($(document.body)); - } + launchAce: function (e) { + e.preventDefault(); + launch(); }, }); @@ -55,88 +68,143 @@ website.ace.ViewEditor = openerp.Widget.extend({ template: 'website.ace_view_editor', events: { - 'change #ace-view-list': 'displayView', - 'click button[data-action=save]': 'saveView', + 'change #ace-view-list': 'displaySelectedView', + 'click button[data-action=save]': 'saveViews', 'click button[data-action=format]': 'formatXml', 'click button[data-action=close]': 'close', }, + init: function (parent) { + this.buffers = {}; + this._super(parent); + }, start: function () { var self = this; + self.aceEditor = ace.edit(self.$('#ace-view-editor')[0]); + self.aceEditor.setTheme("ace/theme/monokai"); var viewId = $(document.documentElement).data('view-xmlid'); openerp.jsonRpc('/website/customize_template_get', 'call', { 'xml_id': viewId, 'optional': false, }).then(function (views) { - self.loadViewList.call(self, views); + self.loadViews.call(self, views); + self.open.call(self); + }); + }, + loadViews: function (views) { + var self = this; + var activeViews = _.filter(views, function (view) { + return view.active; + }); + var $viewList = self.$('#ace-view-list'); + _.each(activeViews, function (view) { + if (view.id) { + new website.ace.ViewOption(self, view).appendTo($viewList); + self.loadView(view.id); + } + }); + }, + loadView: function (id) { + var viewId = parseInt(id, 10); + var self = this; + openerp.jsonRpc('/web/dataset/call', 'call', { + model: 'ir.ui.view', + method: 'read', + args: [[viewId], ['arch'], website.get_context()], + }).then(function(result) { + var editingSession = self.buffers[viewId] = new ace.EditSession(result[0].arch);; + editingSession.setMode("ace/mode/xml"); + editingSession.setUndoManager(new ace.UndoManager()); + editingSession.on("change", function () { + setTimeout(function () { + var $option = self.$('#ace-view-list').find('[value='+viewId+']'); + var bufferName = $option.text(); + var dirtyMarker = " (unsaved changes)"; + var isDirty = editingSession.getUndoManager().hasUndo(); + if (isDirty && bufferName.indexOf(dirtyMarker) < 0) { + $option.text(bufferName + dirtyMarker); + } else if (!isDirty && bufferName.indexOf(dirtyMarker) > 0) { + $option.text(bufferName.substring(0, bufferName.indexOf(dirtyMarker))); + } + }, 1); + }); + if (viewId === self.selectedViewId()) { + self.displayView.call(self, viewId); + } }); - this.$el.hover(); }, selectedViewId: function () { return parseInt(this.$('#ace-view-list').val(), 10); }, - loadViewList: function (views) { - var activeViews = _.filter(views, function (view) { - return view.active; - }); - var $viewList = this.$('#ace-view-list'); - _.each(activeViews, function (view) { - if (view.id) { - new website.ace.ViewOption(this, view).appendTo($viewList); - } - }); - var editor = ace.edit(this.$('#ace-view-editor')[0]); - editor.setTheme("ace/theme/monokai"); - this.aceEditor = editor; - this.open(); + displayView: function (id) { + var viewId = parseInt(id, 10); + var editingSession = this.buffers[viewId]; + if (editingSession) { + this.aceEditor.setSession(editingSession); + } }, - displayView: function () { - var editor = this.aceEditor; - openerp.jsonRpc('/web/dataset/call', 'call', { - model: 'ir.ui.view', - method: 'read', - args: [[this.selectedViewId()], ['arch'], website.get_context()], - }).then(function(result) { - var xml = new website.ace.XmlDocument(result[0].arch); - var editingSession = new ace.EditSession(xml.xml); - editingSession.setMode("ace/mode/xml"); - editingSession.setUndoManager(new ace.UndoManager()); - editor.setSession(editingSession); - }); + displaySelectedView: function () { + this.displayView(this.selectedViewId()); + this.updateHash(); }, formatXml: function () { var xml = new website.ace.XmlDocument(this.aceEditor.getValue()); this.aceEditor.setValue(xml.format()); }, - saveView: function () { + saveViews: function () { var self = this; - var xml = new website.ace.XmlDocument(this.aceEditor.getValue()); + var toSave = _.filter(_.map(self.buffers, function (editingSession, viewId) { + return { + id: parseInt(viewId, 10), + isDirty: editingSession.getUndoManager().hasUndo(), + text: editingSession.getValue(), + }; + }), function (session) { + return session.isDirty; + }); + var requests = _.map(toSave, self.saveView); + $.when.apply($, requests).then(function () { + self.reloadPage.call(self); + }).fail(function (source, error) { + var message = (error.data.arguments[0] === "Access Denied") ? "Access denied: please sign in" : error.message; + self.displayError.call(self, message); + }); + }, + saveView: function (session) { + var xml = new website.ace.XmlDocument(session.text); if (xml.isWellFormed()) { - openerp.jsonRpc('/web/dataset/call', 'call', { + return openerp.jsonRpc('/web/dataset/call', 'call', { model: 'ir.ui.view', method: 'write', - args: [[this.selectedViewId()], { 'arch': xml.xml }, website.get_context()], - }).then(function(result) { - self.reloadPage(); - }).fail(function (error) { - self.displayError(error); + args: [[session.id], { 'arch': xml.xml }, website.get_context()], }); } else { - self.displayError(); + return $.Deferred().fail("Malformed XML document"); } }, + updateHash: function () { + window.location.hash = hash + "?view=" + this.selectedViewId(); + }, reloadPage: function () { - // TODO Reload { header + div#wrap + footer } only + this.updateHash(); window.location.reload(); }, displayError: function (error) { // TODO Improve feedback (e.g. update 'Save' button + tooltip) - alert("Malformed XML document"); + alert(error); }, open: function () { this.$el.removeClass('oe_ace_closed').addClass('oe_ace_open'); - this.displayView(); + var curentHash = window.location.hash; + var indexOfView = curentHash.indexOf("?view="); + if (indexOfView >= 0) { + var viewId = parseInt(curentHash.substring(indexOfView + 6, curentHash.length), 10); + this.$('#ace-view-list').val(viewId).change(); + } else { + window.location.hash = hash; + } }, close: function () { + window.location.hash = ""; var self = this; this.$el.bind('transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd', function () { globalEditor = null; diff --git a/addons/website/static/src/js/website.editor.js b/addons/website/static/src/js/website.editor.js index 16443ac36c4..b2a93b9cfd6 100644 --- a/addons/website/static/src/js/website.editor.js +++ b/addons/website/static/src/js/website.editor.js @@ -236,10 +236,17 @@ this.rte = new website.RTE(this); this.rte.on('change', this, this.proxy('rte_changed')); + var instanceReady = false; + this.rte.on('instanceReady', this, function () { + clearTimeout(instanceReady); + instanceReady = setTimeout(function () { + self.trigger('rte:ready'); + }, 0); + }); return $.when( this._super.apply(this, arguments), - this.rte.prependTo(this.$('#website-top-edit .nav.pull-right')) + this.rte.appendTo(this.$('#website-top-edit .nav.pull-right')) ); }, edit: function () { @@ -667,23 +674,34 @@ }, 'change input[type=file]': 'file_selection', 'change input.url': 'preview_image', - 'click .existing-attachments a': 'select_existing', + 'click a[href=#existing]': 'browse_existing', + 'change select.image-style': 'preview_image', }), start: function () { var selection = this.editor.getSelection(); var el = selection && selection.getSelectedElement(); this.element = null; + + var $select = this.$('.image-style'); + var $options = $select.children(); + this.image_styles = $options.map(function () { return this.value; }).get(); + if (el && el.is('img')) { this.element = el; + _(this.image_styles).each(function (style) { + if (el.hasClass(style)) { + $select.val(style); + } + }); + // set_image must follow setup of image style this.set_image(el.getAttribute('src')); } - return $.when( - this._super(), - this.fetch_existing().then(this.proxy('fetched_existing'))); + return this._super(); }, save: function () { var url = this.$('input.url').val(); + var style = this.$('.image-style').val(); var element, editor = this.editor; if (!(element = this.element)) { element = editor.document.createElement('img'); @@ -697,7 +715,10 @@ }, 0); } element.setAttribute('src', url); - this._super(); + $(element.$).removeClass(this.image_styles.join(' ')); + if (style) { element.addClass(style); } + + return this._super(); }, /** @@ -735,17 +756,54 @@ var image = this.$('input.url').val(); if (!image) { return; } - this.$('img.image-preview').attr('src', image); + this.$('img.image-preview') + .attr('src', image) + .removeClass(this.image_styles.join(' ')) + .addClass(this.$('select.image-style').val()); + }, + + browse_existing: function (e) { + e.preventDefault(); + new website.editor.ExistingImageDialog(this).appendTo(document.body); + }, + }); + + var IMAGES_PER_ROW = 6; + var IMAGES_ROWS = 4; + website.editor.ExistingImageDialog = website.editor.Dialog.extend({ + template: 'website.editor.dialog.image.existing', + events: _.extend({}, website.editor.Dialog.prototype.events, { + 'click .existing-attachments img': 'select_existing', + 'click .pager > li': function (e) { + e.preventDefault(); + var $target = $(e.currentTarget); + if ($target.hasClass('disabled')) { + return; + } + this.page += $target.hasClass('previous') ? -1 : 1; + this.display_attachments(); + }, + }), + init: function (parent) { + this.image = null; + this.page = 0; + this.parent = parent; + this._super(parent.editor); + }, + + start: function () { + return $.when( + this._super(), + this.fetch_existing().then(this.proxy('fetched_existing'))); }, fetch_existing: function () { - // FIXME: lazy load attachments? return openerp.jsonRpc('/web/dataset/call_kw', 'call', { model: 'ir.attachment', method: 'search_read', args: [], kwargs: { - fields: ['name'], + fields: ['name', 'website_url'], domain: [['res_model', '=', 'ir.ui.view']], order: 'name', context: website.get_context(), @@ -753,17 +811,36 @@ }); }, fetched_existing: function (records) { + this.records = records; + this.display_attachments(); + }, + display_attachments: function () { + var per_screen = IMAGES_PER_ROW * IMAGES_ROWS; + + var from = this.page * per_screen; + var records = this.records; + // Create rows of 3 records var rows = _(records).chain() - .groupBy(function (_, index) { return Math.floor(index / 3); }) + .slice(from, from + per_screen) + .groupBy(function (_, index) { return Math.floor(index / IMAGES_PER_ROW); }) .values() .value(); + this.$('.existing-attachments').replaceWith( - openerp.qweb.render('website.editor.dialog.image.existing', {rows: rows})); + openerp.qweb.render( + 'website.editor.dialog.image.existing.content', {rows: rows})); + this.$('.pager') + .find('li.previous').toggleClass('disabled', (from === 0)).end() + .find('li.next').toggleClass('disabled', (from + per_screen >= records.length)); + }, select_existing: function (e) { - e.preventDefault(); - this.set_image(e.currentTarget.getAttribute('href')); + var link = $(e.currentTarget).attr('src'); + if (link) { + this.parent.set_image(link); + } + this.close() }, }); diff --git a/addons/website/static/src/js/website.mobile.js b/addons/website/static/src/js/website.mobile.js index 6487b2b457b..d4630d0a0c2 100644 --- a/addons/website/static/src/js/website.mobile.js +++ b/addons/website/static/src/js/website.mobile.js @@ -17,7 +17,7 @@ 'hidden.bs.modal': 'destroy' }, start: function () { - document.getElementById("mobile-viewport").src = window.location.href + "?mobile-preview=true"; + document.getElementById("mobile-viewport").src = window.location.origin + window.location.pathname + "#mobile-preview"; this.$el.modal(); }, }); diff --git a/addons/website/static/src/js/website.seo.js b/addons/website/static/src/js/website.seo.js index 738bd46d413..1d9234165c4 100644 --- a/addons/website/static/src/js/website.seo.js +++ b/addons/website/static/src/js/website.seo.js @@ -6,30 +6,52 @@ website.EditorBar.include({ events: _.extend({}, website.EditorBar.prototype.events, { - 'click a[data-action=promote-current-page]': 'promotePage', + 'click a[data-action=promote-current-page]': 'launchSeo', }), - promotePage: function () { + launchSeo: function () { (new website.seo.Configurator()).appendTo($(document.body)); }, }); website.seo = {}; + function analyzeKeyword(htmlPage, keyword) { + return htmlPage.isInTitle(keyword) ? { + title: 'keyword-in-title', + description: "This keyword is used in the page title", + } : htmlPage.isInDescription(keyword) ? { + title: 'keyword-in-description', + description: "This keyword is used in the page description", + } : htmlPage.isInBody(keyword) ? { + title: 'keyword-in-body', + description: "This keyword is used in the page content." + } : { title: "", description: "" }; + } + website.seo.Suggestion = openerp.Widget.extend({ template: 'website.seo_suggestion', events: { 'click .js_seo_suggestion': 'select', }, - init: function (parent, keyword) { - this.keyword = keyword; - var keywordRegex = new RegExp(this.keyword, "gi"); - var pageText = $('body').children().not('.js_seo_configuration').text(); - var isKeywordInBody = keywordRegex.test(pageText); - // cf. http://getbootstrap.com/components/#labels - // default, primary, success, info, warning, danger - this.type = isKeywordInBody ? 'info' : 'default'; + init: function (parent, options) { + this.root = options.root; + this.keyword = options.keyword; + this.htmlPage = options.page; this._super(parent); }, + start: function () { + this.htmlPage.on('title-changed', this, this.renderElement); + this.htmlPage.on('description-changed', this, this.renderElement); + }, + analyze: function () { + return analyzeKeyword(this.htmlPage, this.keyword); + }, + highlight: function () { + return this.analyze().title; + }, + tooltip: function () { + return this.analyze().description; + }, select: function () { this.trigger('selected', this.keyword); }, @@ -37,8 +59,9 @@ website.seo.SuggestionList = openerp.Widget.extend({ template: 'website.seo_list', - init: function (parent, word) { - this.word = word; + init: function (parent, options) { + this.root = options.root; + this.htmlPage = options.page; this._super(parent); }, start: function () { @@ -50,14 +73,18 @@ function addSuggestions (list) { self.$el.empty(); // TODO Improve algorithm + Ajust based on custom user keywords - var nameRegex = new RegExp(self.companyName, "gi"); - var cleanList = _.map(list, function removeCompanyName (word) { - return word.replace(nameRegex, "").trim(); + var regex = new RegExp(self.root, "gi"); + var cleanList = _.map(list, function (word) { + return word.replace(regex, "").trim(); }); // TODO Order properly ? _.each(_.uniq(cleanList), function (keyword) { if (keyword) { - var suggestion = new website.seo.Suggestion(self, keyword); + var suggestion = new website.seo.Suggestion(self, { + root: self.root, + keyword: keyword, + page: self.htmlPage, + }); suggestion.on('selected', self, function (word) { self.trigger('selected', word); }); @@ -65,7 +92,7 @@ } }); } - $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(this.word + " "), addSuggestions); + $.getJSON("http://seo.eu01.aws.af.cm/suggest/"+encodeURIComponent(this.root + " "), addSuggestions); }, }); @@ -75,21 +102,37 @@ 'click a[data-action=remove-keyword]': 'destroy', }, maxWordsPerKeyword: 4, // TODO Check - init: function (parent, keyword) { - this.keyword = keyword; - // cf. http://getbootstrap.com/components/#labels - // default, primary, success, info, warning, danger - this.type = 'warning'; + init: function (parent, options) { + this.keyword = options.word; + this.htmlPage = options.page; this._super(parent); }, start: function () { - var self = this; - self.suggestionList = new website.seo.SuggestionList(self, this.keyword); - self.suggestionList.on('selected', self, function (word) { - self.trigger('selected', word); + this.htmlPage.on('title-changed', this, this.updateLabel); + this.htmlPage.on('description-changed', this, this.updateLabel); + this.suggestionList = new website.seo.SuggestionList(this, { + root: this.keyword, + page: this.htmlPage, + }); + this.suggestionList.on('selected', this, function (word) { + this.trigger('selected', word); }); this.suggestionList.appendTo(this.$('.js_seo_keyword_suggestion')); }, + analyze: function () { + return analyzeKeyword(this.htmlPage, this.keyword); + }, + highlight: function () { + return this.analyze().title; + }, + tooltip: function () { + return this.analyze().description; + }, + updateLabel: function () { + var cssClass = "oe_seo_keyword js_seo_keyword " + this.highlight(); + this.$(".js_seo_keyword").attr('class', cssClass); + this.$(".js_seo_keyword").attr('title', this.tooltip()); + }, destroy: function () { this.trigger('removed'); this._super(); @@ -99,28 +142,44 @@ website.seo.KeywordList = openerp.Widget.extend({ template: 'website.seo_list', maxKeywords: 10, - init: function (parent) { + init: function (parent, options) { + this.htmlPage = options.page; this._super(parent); }, + start: function () { + var self = this; + var existingKeywords = self.htmlPage.keywords(); + if (existingKeywords.length > 0) { + _.each(existingKeywords, function (word) { + self.add.call(self, word); + }); + } else { + var companyName = self.htmlPage.company().toLowerCase(); + self.add(companyName); + } + }, keywords: function () { var result = []; - this.$('span.js_seo_keyword').each(function () { + this.$('.js_seo_keyword').each(function () { result.push($(this).data('keyword')); }); return result; }, - isKeywordListFull: function () { + isFull: function () { return this.keywords().length >= this.maxKeywords; }, - isExistingKeyword: function (word) { + exists: function (word) { return _.contains(this.keywords(), word); }, add: function (candidate) { var self = this; // TODO Refine - var word = candidate ? candidate.replace(/[,;.:<>]+/g, " ").replace(/ +/g, " ").trim() : ""; - if (word && !self.isKeywordListFull() && !self.isExistingKeyword(word)) { - var keyword = new website.seo.Keyword(self, word); + var word = candidate ? candidate.replace(/[,;.:<>]+/g, " ").replace(/ +/g, " ").trim().toLowerCase() : ""; + if (word && !self.isFull() && !self.exists(word)) { + var keyword = new website.seo.Keyword(self, { + word: word, + page: this.htmlPage, + }); keyword.on('removed', self, function () { self.trigger('list-not-full'); self.trigger('removed', word); @@ -130,7 +189,7 @@ }); keyword.appendTo(self.$el); } - if (self.isKeywordListFull()) { + if (self.isFull()) { self.trigger('list-full'); } }, @@ -147,9 +206,13 @@ website.seo.ImageList = openerp.Widget.extend({ + init: function (parent, options) { + this.htmlPage = options.page; + this._super(parent); + }, start: function () { var self = this; - new website.seo.HtmlPage().images().each(function (index, image) { + this.htmlPage.images().each(function (index, image) { new website.seo.Image(self, image).appendTo(self.$el); }); }, @@ -169,29 +232,33 @@ }, }); - website.seo.HtmlPage = openerp.Class.extend({ + website.seo.HtmlPage = openerp.Class.extend(openerp.PropertiesMixin, { url: function () { var url = window.location.href; var hashIndex = url.indexOf('#'); return hashIndex >= 0 ? url.substring(0, hashIndex) : url; }, title: function () { - return $('title').text(); + return $('title').text().trim(); }, changeTitle: function (title) { $('title').text(title); + this.trigger('title-changed', title); }, description: function () { - return $('meta[name=description]').attr('value'); + return $('meta[name=description]').attr('value').trim(); }, changeDescription: function (description) { - return $('meta[name=description]').attr('value', description); + $('meta[name=description]').attr('value', description); + this.trigger('description-changed', description); }, keywords: function () { - return $('meta[name=keywords]').attr('value').split(","); + var parsed = $('meta[name=keywords]').attr('value').split(","); + return parsed[0] ? parsed: []; }, changeKeywords: function (keywords) { - return $('meta[name=keywords]').attr('value', keyword.join(",")); + $('meta[name=keywords]').attr('value', keywords.join(",")); + this.trigger('keywords-changed', keywords); }, headers: function (tag) { return $('#wrap '+tag).map(function () { @@ -210,6 +277,18 @@ company: function () { return $('meta[name="openerp.company"]').attr('value'); }, + bodyText: function () { + return $('body').children().not('.js_seo_configuration').text(); + }, + isInBody: function (text) { + return new RegExp(text, "gi").test(this.bodyText()); + }, + isInTitle: function (text) { + return new RegExp(text, "gi").test(this.title()); + }, + isInDescription: function (text) { + return new RegExp(text, "gi").test(this.description()); + }, }); website.seo.Tip = openerp.Widget.extend({ @@ -245,10 +324,14 @@ $modal.find('.js_seo_page_url').text(htmlPage.url()); $modal.find('input[name=seo_page_title]').val(htmlPage.title()); $modal.find('textarea[name=seo_page_description]').val(htmlPage.description()); - self.suggestImprovements(htmlPage); - self.imageList = new website.seo.ImageList(self); - self.imageList.appendTo($modal.find('.js_seo_image_list')); - self.keywordList = new website.seo.KeywordList(self); + self.suggestImprovements(); + self.imageList = new website.seo.ImageList(self, { page: htmlPage }); + if (htmlPage.images().length === 0) { + $modal.find('.js_image_section').remove() + } else { + self.imageList.appendTo($modal.find('.js_seo_image_list')); + } + self.keywordList = new website.seo.KeywordList(self, { page: htmlPage }); self.keywordList.on('list-full', self, function () { $modal.find('input[name=seo_page_keywords]') .attr('readonly', "readonly") @@ -266,11 +349,9 @@ self.keywordList.add(word); }); self.keywordList.appendTo($modal.find('.js_seo_keywords_list')); - var companyName = htmlPage.company().toLowerCase(); - self.addKeyword(companyName); $modal.modal(); }, - suggestImprovements: function (parser) { + suggestImprovements: function () { var tips = []; var self = this; function displayTip(message, type) { @@ -279,17 +360,17 @@ type: type, }).appendTo(self.$('.js_seo_tips')); } - var htmlPage = parser || new website.seo.HtmlPage(); + var htmlPage = this.htmlPage; if (htmlPage.headers('h1').length === 0) { tips.push({ type: 'warning', - message: "You don't have an <h1> tag on your page.", + message: "This page seems to be missing an <h1> tag.", }); } if (htmlPage.headers('h1').length > 1) { tips.push({ type: 'warning', - message: "You have more than one <h1> tag on your page.", + message: "The page contains more than one <h1> tag.", }); } if (tips.length > 0) { @@ -297,7 +378,7 @@ displayTip(tip.message, tip.type); }); } else { - displayTip("Your page makup is appropriate for search engines.", 'success'); + displayTip("The markup on this page is appropriate for search engines.", 'success'); } }, confirmKeyword: function (e) { @@ -327,7 +408,7 @@ setTimeout(function () { var title = self.$('input[name=seo_page_title]').val(); self.htmlPage.changeTitle(title); - }, 1); + }, 0); }, descriptionChanged: function () { var self = this; @@ -336,5 +417,9 @@ self.htmlPage.changeDescription(description); }, 1); }, + destroy: function () { + this.htmlPage.changeKeywords(this.keywordList.keywords()); + this._super(); + }, }); })(); diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js index 36e72fcff60..3457fbb66e2 100644 --- a/addons/website/static/src/js/website.snippets.js +++ b/addons/website/static/src/js/website.snippets.js @@ -5,54 +5,70 @@ website.templates.push('/website/static/src/xml/website.snippets.xml'); website.EditorBar.include({ - events: _.extend({}, website.EditorBar.prototype.events, { - 'click button[data-action=snippet]': 'snippet', - }), start: function () { - return this._super().then(function () { - - this.$buttons.snippet = this.$('button[data-action=snippet]'); - - }.bind(this)); + var self = this; + $("[data-oe-model]").on('click', function (event) { + var tag = event.srcElement.tagName.toLowerCase(); + var $this = $(event.srcElement); + if (!(tag === 'a' || tag === "button") && !$this.parents("a, button").length) { + self.$('[data-action="edit"]').parent().effect('bounce', {distance: 18, times: 5}, 250); + } + }); + return this._super(); }, edit: function () { - window.snippets = this.snippets = new website.snippet.BuildingBlock(this); - this.snippets.appendTo($(document.body)); + $("body").off('click'); + var self = this; + self.on('rte:ready', this, function () { + + window.snippets = self.snippets = new website.snippet.BuildingBlock(this); + self.snippets.appendTo(self.$el); + + }); return this._super.apply(this, arguments); }, - snippet: function (ev) { - this.snippets.toggle(); - }, save: function () { - $('body').trigger("save"); + remove_added_snippet_id(); this._super(); }, }); + + $(document).ready(function () { + hack_to_add_snippet_id(); + $("[data-snippet-id]").each(function() { + var $snipped_id = $(this); + if (typeof $snipped_id.data("snippet-view") === 'undefined' && + website.snippet.animationRegistry[$snipped_id.data("snippet-id")]) { + $snipped_id.data("snippet-view", new website.snippet.animationRegistry[$snipped_id.data("snippet-id")]($snipped_id)); + } + }); + }); + /* ----- SNIPPET SELECTOR ---- */ website.snippet = {}; + // puts $el at the same absolute position as $target - website.snippet.cover_target = function ($el, $target){ - $el.css({ - 'position': 'absolute', - 'width': $target.outerWidth(), - 'height': $target.outerHeight(), - }); - $el.css($target.offset()); - }; function hack_to_add_snippet_id () { _.each(website.snippet.selector, function (val) { $(val[0]).each(function() { - if ($(this).is("[data-snippet-id='"+ val[1]+"']")) - $(this).removeAttr("data-snippet-id"); - if (!$(this).is("[data-snippet-id]") && $(this).parents("[data-oe-model]").length) + if (!$(this).is("[data-snippet-id]") && $(this).parents("[data-oe-model]").length) { $(this).attr("data-snippet-id", val[1]); + } + }); + }); + } + function remove_added_snippet_id () { + _.each(website.snippet.selector, function (val) { + $(val[0]).each(function() { + if ($(this).data("snippet-id") === val[1]) { + $(this).removeAttr("data-snippet-id"); + } }); }); } - website.snippet.selector = []; website.snippet.BuildingBlock = openerp.Widget.extend({ @@ -65,49 +81,134 @@ $("
").appendTo('body'); } this.$active_snipped_id = false; - this.active = false; - this.parent_of_editable_box = "body > :not(:has(#website-top-view)):not(#oe_manipulators):not(#oe_snippets) "; hack_to_add_snippet_id(); + $("body").on('DOMNodeInserted', hack_to_add_snippet_id); + }, + dom_filter: function (dom) { + if (typeof dom === "string") { + var include = "[data-oe-model]"; + var sdom = dom.split(','); + dom = ""; + _.each(sdom, function (val) { + val = val.replace(/^\s+|\s+$/g, ''); + dom += "body " + include + " " + val + ", "; + val = val.split(" "); + dom += "body "+ val.shift() + include + val.join(" ") + ", "; + }); + dom = dom.replace(/,\s*$/g, ''); + return $(dom); + } else { + return $(dom).is("[data-oe-model]") || $(dom).parents("[data-oe-model]").length ? $(dom) : $(""); + } }, start: function() { var self = this; - var snippets_template = []; - _.each(openerp.qweb.compiled_templates, function (val, key) { - if (key.indexOf('website.snippets.') === 0) { - var $snippet = $(openerp.qweb.render(key)).addClass("oe_snippet"); - if ($snippet.data("action")) { - self.$el.find('#snippet_' + $snippet.data('category')).append($snippet); - self.make_snippet_draggable($snippet); - } - } - }); + var $ul = this.parent.$("#website-top-edit ul"); + + var $button = $(openerp.qweb.render('website.snippets_button')) + .click(function () {self.$el.toggleClass("hidden");}) + .prependTo($ul); + + this.fetch_snippet_templates(); this.bind_selected_manipulator(); this.bind_snippet_click_editor(); + this.activate_overlay_zones(); + + this.scrollspy(); + this.$el.addClass("hidden"); + + this.$modal = $(openerp.qweb.render('website.snippets_modal')); + this.$modal.appendTo("body"); + }, + fetch_snippet_templates: function () { + var self = this; + this.style_templates = {}; + + _.each(openerp.qweb.compiled_templates, function (val, key) { + if (key.indexOf('website.snippets.') === 0) { + var $snippet = $(openerp.qweb.render(key)).addClass("oe_snippet"); + var snipped_id = $snippet.data("snippet-id"); + if (snipped_id) { + + if ($snippet.data('category') === 'style') { + self.style_templates[snipped_id] = { + 'snipped-id' : snipped_id, + 'selector': $snippet.data('selector'), + 'class': $snippet.find(".oe_snippet_class").text(), + 'label': $snippet.find(".oe_snippet_label").text(), + '$el': $snippet + }; + } + if ($snippet.find(".oe_snippet_thumbnail").length) { + self.$el.find('#snippet_' + $snippet.data('category')).append($snippet); + self.make_snippet_draggable($snippet); + } + } + } + }); + }, + scrollspy: function (){ + var self = this; + var $ul = this.$("ul"); + var $pill = self.$(".pill-content"); + var padding = parseInt($pill.css("padding-left")); + var $scroll = this.$(".scroll"); + + $scroll.scroll(function () { + $pill.find("> div").each(function () { + if ($(this).position().left <= padding) { + $ul.find("> li").removeClass('active'); + $ul.find("a[href='#" + $(this).attr("id") + "']").parent("li").addClass('active'); + } + }); + }); + + $ul.find("a").click(function (event) { + event.preventDefault(); + $scroll.scrollLeft( $scroll.scrollLeft() + $($(event.currentTarget).attr("href")).position().left - padding ); + return false; + }); + + $pill.css("padding-right", self.$el.outerWidth() - padding + 10 - $pill.find("> div:last").outerWidth()); + $ul.find("> li:first").addClass('active'); + }, + cover_target: function ($el, $target){ + var pos = $target.offset(); + var mt = parseInt($target.css("margin-top") || 0); + var mb = parseInt($target.css("margin-bottom") || 0); + $el.css({ + 'position': 'absolute', + 'width': $target.outerWidth(), + 'height': $target.outerHeight() + mt + mb, + 'top': pos.top - mt, + 'left': pos.left + }); + }, + show: function () { + this.$el.removeClass("hidden"); + }, + hide: function () { + this.$el.addClass("hidden"); }, bind_snippet_click_editor: function () { var self = this; var snipped_event_flag = false; $("body").on('click', "[data-snippet-id]", function (event) { - if (!self.active || snipped_event_flag) { + if (snipped_event_flag) { return; } - var $target = $(event.currentTarget); - if (self.$active_snipped_id) { - if (self.$active_snipped_id[0] === $target[0] || $.contains(self.$active_snipped_id, $target[0])) { - var $parent = self.$active_snipped_id.parents("[data-snippet-id]:first"); - if ($parent.length) { - $target = $parent; - } - } - } snipped_event_flag = true; setTimeout(function () {snipped_event_flag = false;}, 0); + var $target = $(event.currentTarget); + if (self.$active_snipped_id && self.$active_snipped_id.is($target)) { + return; + } self.make_active($target); }); - $("body > :not(:has(#website-top-view)):not(#oe_manipulators)").on('click', function (ev) { + $("[data-oe-model]").on('click', function (ev) { if (!snipped_event_flag && self.$active_snipped_id && !self.$active_snipped_id.parents("[data-snippet-id]:first")) { self.make_active(false); } @@ -151,10 +252,10 @@ create_overlay: function ($snipped_id) { if (typeof $snipped_id.data("snippet-editor") === 'undefined') { this.activate_overlay_zones($snipped_id); - var editor = website.snippet.editorRegistry[$snipped_id.data("snippet-id")] || website.snippet.Editor; + var editor = website.snippet.editorRegistry[$snipped_id.data("snippet-id")] || website.snippet.editorRegistry.resize; $snipped_id.data("snippet-editor", new editor(this, $snipped_id)); } - website.snippet.cover_target($snipped_id.data('overlay'), $snipped_id); + this.cover_target($snipped_id.data('overlay'), $snipped_id); }, path_eval: function(path){ @@ -170,21 +271,19 @@ var self = this; var $selected_target = null; $("body").mouseover(function (event){ - if (!self.active) { - return; - } var $target = $(event.srcElement).parents("[data-snippet-id]:first"); + $target = self.dom_filter($target); if($target.length && !self.editor_busy) { if($selected_target != $target){ - if($selected_target){ - $selected_target.data('overlay').removeClass('oe_selected'); + if($selected_target && $selected_target.data('overlay')){ + $selected_target.data('overlay').removeClass('oe_hover'); } $selected_target = $target; self.create_overlay($target); - $target.data('overlay').addClass('oe_selected'); + $target.data('overlay').addClass('oe_hover'); } - } else if($selected_target) { - $selected_target.data('overlay').removeClass('oe_selected'); + } else if($selected_target && $selected_target.data('overlay')) { + $selected_target.data('overlay').removeClass('oe_hover'); } }); }, @@ -192,22 +291,47 @@ // activate drag and drop for the snippets in the snippet toolbar make_snippet_draggable: function($snippet){ var self = this; + var $toInsert = false; + var $tumb = $snippet.find(".oe_snippet_thumbnail"); + var dropped = false; $snippet.draggable({ + greedy: true, helper: 'clone', zIndex: '1000', appendTo: 'body', cursor: "move", + handle: ".oe_snippet_thumbnail", + cursorAt: { + 'left': $tumb.outerWidth()/2, + 'top': $tumb.outerHeight()/2 + }, start: function(){ - var action = $snippet.data('action'); + self.hide(); + dropped = false; + var snipped_id = $snippet.data('snippet-id'); + var action = $snippet.find('.oe_snippet_body').size() ? 'insert' : 'mutate'; if( action === 'insert'){ + if (!$snippet.data('selector-siblings') && !$snippet.data('selector-children') && !$snippet.data('selector-vertical-children')) { + console.debug($snippet.data("snippet-id") + " have oe_snippet_body class and have not for insert action"+ + "data-selector-siblings, data-selector-children or data-selector-vertical-children tag for mutate action"); + return; + } self.activate_insertion_zones({ siblings: $snippet.data('selector-siblings'), - childs: $snippet.data('selector-childs'), - vertical_childs: $snippet.data('selector-vertical-childs') + children: $snippet.data('selector-children'), + vertical_children: $snippet.data('selector-vertical-children') }); - } else if( action === 'mutate' ){ + $toInsert = $snippet.find('.oe_snippet_body').clone(); + $toInsert.removeClass('oe_snippet_body'); + $toInsert.attr('data-snippet-id', snipped_id); + + } else if( action === 'mutate' ){ + if (!$snippet.data('selector')) { + console.debug($snippet.data("snippet-id") + " have not oe_snippet_body class and have not data-selector tag"); + return; + } var $targets = self.activate_overlay_zones($snippet.data('selector')); $targets.each(function(){ var $clone = $(this).data('overlay').clone(); @@ -219,49 +343,52 @@ $('.oe_drop_zone').droppable({ over: function(){ - // FIXME: stupid hack to prevent multiple droppable to activate at once ... - // it's not even working properly but it's better than nothing. - $(".oe_drop_zone.oe_hover").removeClass("oe_hover"); - $(this).addClass("oe_hover"); + if( action === 'insert'){ + dropped = true; + $(this).first().after($toInsert); + } }, out: function(){ - $(this).removeClass("oe_hover"); + if( action === 'insert'){ + dropped = false; + $toInsert.detach(); + } }, drop: function(){ - var snipped_id = $snippet.data('snippet-id'); - - if (!$(".oe_drop_zone.oe_hover").length) { - return false; - } + dropped = true; var $target = false; - if($snippet.find('.oe_snippet_body').size()){ - var $toInsert = $snippet.find('.oe_snippet_body').clone(); - $toInsert.removeClass('oe_snippet_body'); - $toInsert.attr('data-snippet-id', snipped_id); - $(".oe_drop_zone.oe_hover").first().after($toInsert); + if(action === 'insert'){ $target = $toInsert; - hack_to_add_snippet_id(); - } else { - $target = $(".oe_drop_zone.oe_hover").first().data('target'); - } - - $('.oe_drop_zone').droppable('destroy').remove(); - if (website.snippet.animationRegistry[snipped_id]) { - new website.snippet.animationRegistry[snipped_id]($target); - } - if (website.snippet.editorRegistry[snipped_id]) { + if (website.snippet.animationRegistry[snipped_id]) { + new website.snippet.animationRegistry[snipped_id]($target); + } + self.create_overlay($target); $target.data("snippet-editor").build_snippet($target); - setTimeout(function () {self.make_active($target);},0); + + } else { + $target = $(this).data('target'); + + self.create_overlay($target); + if (website.snippet.editorRegistry[snipped_id]) { + var snippet = new website.snippet.editorRegistry[snipped_id](self, $target); + snippet.build_snippet($target); + } } + $('.oe_drop_zone').remove(); + + setTimeout(function () {self.make_active($target);},0); }, }); }, stop: function(){ $('.oe_drop_zone').droppable('destroy').remove(); + if (!dropped) { + self.$modal.modal('toggle'); + } }, }); }, @@ -272,46 +399,22 @@ return $(this).data('snippet-id') === id; }).first(); }, - // WIP - make_draggable_instance: function($instance){ - var self = this; - var $snippet = get_snippet_from_id($instance.data('snippet-id')); - - $instance.draggable({ - greedy: true, - helper: 'clone', - zIndex: '1000', - appendTo: 'body', - start: function(){ - var action = $snippet.data('action'); - if(action === 'insert'){ - - self.activate_insertion_zones({ - siblings: $snippet.data('selector-siblings'), - child: $snippet.data('selector-childs'), - vertical_childs: $snippet.data('selector-vertical-childs') - }); - - } - } - }); - }, // Create element insertion drop zones. two css selectors can be provided - // selector.childs -> will insert drop zones as direct child of the selected elements + // selector.children -> will insert drop zones as direct child of the selected elements // in case the selected elements have children themselves, dropzones will be interleaved // with them. // selector.siblings -> will insert drop zones after and before selected elements activate_insertion_zones: function(selector){ var self = this; - var child_selector = selector.childs ? this.parent_of_editable_box + (selector.childs).split(",").join(this.parent_of_editable_box) : false; - var sibling_selector = selector.siblings ? this.parent_of_editable_box + (selector.siblings).split(",").join(this.parent_of_editable_box) : false; - var vertical_child_selector = selector.vertical_childs ? this.parent_of_editable_box + (selector.vertical_childs).split(",").join(this.parent_of_editable_box) : false; + var child_selector = selector.children; + var sibling_selector = selector.siblings; + var vertical_child_selector = selector.vertical_children; var zone_template = "
"; if(child_selector){ - $(child_selector).each(function (){ + self.dom_filter(child_selector).each(function (){ var $zone = $(this); $zone.find('> *:not(.oe_drop_zone):visible').after(zone_template); $zone.prepend(zone_template); @@ -319,16 +422,38 @@ } if(vertical_child_selector){ - $(vertical_child_selector).each(function (){ + self.dom_filter(vertical_child_selector).each(function (){ var $zone = $(this); - var $template = $(zone_template).addClass("oe_vertical").css('height', $zone.outerHeight()+'px'); - $zone.find('> *:not(.oe_drop_zone):visible').after($template); - $zone.prepend($template.clone()); + var $template = $(zone_template).addClass("oe_vertical"); + var nb = 0; + var $lastinsert = false; + var left = 0; + var temp_left = 0; + $zone.find('> *:not(.oe_drop_zone):visible').each(function () { + var $col = $(this); + $template.css('height', ($col.outerHeight() + parseInt($col.css("margin-top")) + parseInt($col.css("margin-bottom")))+'px'); + $lastinsert = $template.clone(); + $(this).after($lastinsert); + + temp_left = $col.position().left; + if (left === temp_left) { + $col.prev(".oe_drop_zone.oe_vertical").remove(); + $col.before($template.clone().css("clear", "left")); + } + else if (!nb) { + $col.before($template.clone()); + } + left = temp_left; + nb ++; + }); + if (!nb) { + $zone.prepend($template.css('height', $zone.outerHeight()+'px')); + } }); } if(sibling_selector){ - $(sibling_selector).each(function (){ + self.dom_filter(sibling_selector).each(function (){ var $zone = $(this); if($zone.prev('.oe_drop_zone:visible').length === 0){ $zone.before(zone_template); @@ -342,11 +467,11 @@ var count; do { count = 0; - var $zones = $('.oe_drop_zone + .oe_drop_zone'); // no two consecutive zones - count += $zones.length; - $zones.remove(); + // var $zones = $('.oe_drop_zone + .oe_drop_zone'); // no two consecutive zones + // count += $zones.length; + // $zones.remove(); - $zones = $('.oe_drop_zone > .oe_drop_zone').remove(); // no recusrive zones + $zones = $('.oe_drop_zone > .oe_drop_zone:not(.oe_vertical)').remove(); // no recusrive zones count += $zones.length; $zones.remove(); } while (count > 0); @@ -377,11 +502,8 @@ // generate drop zones covering the elements selected by the selector // we generate overlay drop zones only to get an idea of where the snippet are, the drop activate_overlay_zones: function(selector){ - selector = selector || '[data-snippet-id]'; - if (typeof selector === 'string') - selector = this.parent_of_editable_box + selector.split(",").join(this.parent_of_editable_box); - - var $targets = $(selector); + var $targets = this.dom_filter(selector || '[data-snippet-id]'); + var self = this; function is_visible($el){ return $el.css('display') != 'none' @@ -407,23 +529,16 @@ $target.data('overlay',$zone); $target.on("DOMNodeInserted DOMNodeRemoved DOMSubtreeModified", function () { - website.snippet.cover_target($zone, $target); + self.cover_target($zone, $target); + }); + $('body').on("resize", function () { + self.cover_target($zone, $target); }); } - website.snippet.cover_target($target.data('overlay'), $target); + self.cover_target($target.data('overlay'), $target); }); return $targets; - }, - - toggle: function(){ - this.active = !this.active; - if(this.active){ - this.$el.removeClass('hide'); - this.activate_overlay_zones(); - } else { - this.$el.addClass('hide'); - } - }, + } }); @@ -434,6 +549,13 @@ }, init: function (dom) { this.$el = this.$target = $(dom); + this.start(); + }, + /* + * start + * This method is called after init + */ + start: function () { }, /* onFocusEdit * if they are an editor for this snippet-id @@ -456,17 +578,6 @@ }, }); - $(document).ready(function () { - hack_to_add_snippet_id(); - $("[data-snippet-id]").each(function() { - var $snipped_id = $(this); - if (typeof $snipped_id.data("snippet-view") === 'undefined' && - website.snippet.animationRegistry[$snipped_id.data("snippet-id")]) { - $snipped_id.data("snippet-view", new website.snippet.animationRegistry[$snipped_id.data("snippet-id")]($snipped_id)); - } - }); - }); - website.snippet.editorRegistry = {}; website.snippet.Editor = openerp.Class.extend({ @@ -474,7 +585,10 @@ this.parent = parent; this.$target = $(dom); this.$overlay = this.$target.data('overlay'); + this.snippet_id = this.$target.data("snippet-id"); this._readXMLData(); + this.load_style_options(); + this.get_parent_block(); this.start(); }, @@ -496,15 +610,15 @@ * Insert into the view when the thumbnail is drag and droped into a drop zone */ _readXMLData: function() { - if (this.template) { - this.$el = $(openerp.qweb.render(this.template, {widget: this}).trim()); - this.$editor = this.$el.find(".oe_snippet_options"); - this.$thumbnail = this.$el.find(".oe_snippet_thumbnail"); - this.$body = this.$el.find(".oe_snippet_body"); + this.$el = $(openerp.qweb.render("website.snippets." + this.snippet_id, {widget: this}).trim()); + this.$editor = this.$el.find(".oe_snippet_options"); + this.$thumbnail = this.$el.find(".oe_snippet_thumbnail"); + this.$body = this.$el.find(".oe_snippet_body"); - var $options = this.$overlay.find(".oe_overlay_options"); - this.$editor.prependTo($options.find(".oe_options ul")); - $options.find(".oe_label").text(this.$el.find('.oe_snippet_thumbnail.oe_label, .oe_snippet_thumbnail .oe_label').text()); + var $options = this.$overlay.find(".oe_overlay_options"); + this.$editor.prependTo($options.find(".oe_options ul")); + if ($options.find(".oe_options ul li").length) { + $options.find(".oe_options").removeClass("hidden"); } }, @@ -512,41 +626,127 @@ // activate drag and drop for the snippets in the snippet toolbar _drag_and_drop: function(){ var self = this; + var dropped = false; + var $move = this.$overlay.find(".oe_snippet_move"); this.$overlay.draggable({ greedy: true, appendTo: 'body', cursor: "move", + handle: ".oe_snippet_move", cursorAt: { - top: self.$target.outerHeight()/2, - left: self.$target.outerWidth()/2 }, - distance: 20, - handle: ".js_box_move", + left: 18, + top: 14 + }, + helper: function() { + var $clone = $(this).clone().css({width: "24px", height: "24px", border: 0}); + $clone.find(".oe_overlay_options >:not(.oe_snippet_move), .oe_handle").remove(); + $clone.find(":not(.glyphicon)").css({position: 'absolute', top: 0, left: 0}); + return $clone.appendTo("body").removeClass("hidden"); + }, start: function(){ + self.parent.hide(); self.parent.editor_busy = true; - self.$target.css("display", "none"); + self.$target.after(" @@ -32,7 +31,7 @@
- + @@ -95,43 +94,64 @@ enctype="multipart/form-data" target="fileframe" class="col-sm-8"> -
- -

Image URL

- -
-

— or —

+

— or —

-

— or —

-

Pick an existing attachment

-
-
+
+